summaryrefslogtreecommitdiffstats
path: root/docs/sqlglot/dialects/duckdb.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/sqlglot/dialects/duckdb.html')
-rw-r--r--docs/sqlglot/dialects/duckdb.html1196
1 files changed, 592 insertions, 604 deletions
diff --git a/docs/sqlglot/dialects/duckdb.html b/docs/sqlglot/dialects/duckdb.html
index 70669b8..8d242da 100644
--- a/docs/sqlglot/dialects/duckdb.html
+++ b/docs/sqlglot/dialects/duckdb.html
@@ -1141,163 +1141,160 @@
</span><span id="L-753"><a href="#L-753"><span class="linenos">753</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
</span><span id="L-754"><a href="#L-754"><span class="linenos">754</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="L-755"><a href="#L-755"><span class="linenos">755</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="L-756"><a href="#L-756"><span class="linenos">756</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
-</span><span id="L-757"><a href="#L-757"><span class="linenos">757</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-758"><a href="#L-758"><span class="linenos">758</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-759"><a href="#L-759"><span class="linenos">759</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
-</span><span id="L-760"><a href="#L-760"><span class="linenos">760</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
-</span><span id="L-761"><a href="#L-761"><span class="linenos">761</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
-</span><span id="L-762"><a href="#L-762"><span class="linenos">762</span></a>
-</span><span id="L-763"><a href="#L-763"><span class="linenos">763</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;size&quot;</span><span class="p">):</span>
-</span><span id="L-764"><a href="#L-764"><span class="linenos">764</span></a> <span class="n">method</span> <span class="o">=</span> <span class="n">expression</span><span class="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-765"><a href="#L-765"><span class="linenos">765</span></a> <span class="k">if</span> <span class="n">method</span> <span class="ow">and</span> <span class="n">method</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;RESERVOIR&quot;</span><span class="p">:</span>
-</span><span id="L-766"><a href="#L-766"><span class="linenos">766</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
-</span><span id="L-767"><a href="#L-767"><span class="linenos">767</span></a> <span class="sa">f</span><span class="s2">&quot;Sampling method </span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2"> is not supported with a discrete sample count, &quot;</span>
-</span><span id="L-768"><a href="#L-768"><span class="linenos">768</span></a> <span class="s2">&quot;defaulting to reservoir sampling&quot;</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 class="n">expression</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">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;RESERVOIR&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">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tablesample_sql</span><span class="p">(</span>
-</span><span id="L-773"><a href="#L-773"><span class="linenos">773</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span>
-</span><span id="L-774"><a href="#L-774"><span class="linenos">774</span></a> <span class="p">)</span>
-</span><span id="L-775"><a href="#L-775"><span class="linenos">775</span></a>
-</span><span id="L-776"><a href="#L-776"><span class="linenos">776</span></a> <span class="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-777"><a href="#L-777"><span class="linenos">777</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-778"><a href="#L-778"><span class="linenos">778</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-779"><a href="#L-779"><span class="linenos">779</span></a>
-</span><span id="L-780"><a href="#L-780"><span class="linenos">780</span></a> <span class="k">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-781"><a href="#L-781"><span class="linenos">781</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
-</span><span id="L-782"><a href="#L-782"><span class="linenos">782</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-783"><a href="#L-783"><span class="linenos">783</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
+</span><span id="L-756"><a href="#L-756"><span class="linenos">756</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-757"><a href="#L-757"><span class="linenos">757</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-758"><a href="#L-758"><span class="linenos">758</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
+</span><span id="L-759"><a href="#L-759"><span class="linenos">759</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
+</span><span id="L-760"><a href="#L-760"><span class="linenos">760</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
+</span><span id="L-761"><a href="#L-761"><span class="linenos">761</span></a>
+</span><span id="L-762"><a href="#L-762"><span class="linenos">762</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;size&quot;</span><span class="p">):</span>
+</span><span id="L-763"><a href="#L-763"><span class="linenos">763</span></a> <span class="n">method</span> <span class="o">=</span> <span class="n">expression</span><span class="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-764"><a href="#L-764"><span class="linenos">764</span></a> <span class="k">if</span> <span class="n">method</span> <span class="ow">and</span> <span class="n">method</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;RESERVOIR&quot;</span><span class="p">:</span>
+</span><span id="L-765"><a href="#L-765"><span class="linenos">765</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
+</span><span id="L-766"><a href="#L-766"><span class="linenos">766</span></a> <span class="sa">f</span><span class="s2">&quot;Sampling method </span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2"> is not supported with a discrete sample count, &quot;</span>
+</span><span id="L-767"><a href="#L-767"><span class="linenos">767</span></a> <span class="s2">&quot;defaulting to reservoir sampling&quot;</span>
+</span><span id="L-768"><a href="#L-768"><span class="linenos">768</span></a> <span class="p">)</span>
+</span><span id="L-769"><a href="#L-769"><span class="linenos">769</span></a> <span class="n">expression</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">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;RESERVOIR&quot;</span><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="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">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span><span class="p">)</span>
+</span><span id="L-772"><a href="#L-772"><span class="linenos">772</span></a>
+</span><span id="L-773"><a href="#L-773"><span class="linenos">773</span></a> <span class="k">def</span> <span class="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-774"><a href="#L-774"><span class="linenos">774</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-775"><a href="#L-775"><span class="linenos">775</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-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">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-778"><a href="#L-778"><span class="linenos">778</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
+</span><span id="L-779"><a href="#L-779"><span class="linenos">779</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-780"><a href="#L-780"><span class="linenos">780</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</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">if</span> <span class="n">multiplier</span><span class="p">:</span>
+</span><span id="L-783"><a href="#L-783"><span class="linenos">783</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="L-784"><a href="#L-784"><span class="linenos">784</span></a>
-</span><span id="L-785"><a href="#L-785"><span class="linenos">785</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
-</span><span id="L-786"><a href="#L-786"><span class="linenos">786</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="L-787"><a href="#L-787"><span class="linenos">787</span></a>
-</span><span id="L-788"><a href="#L-788"><span class="linenos">788</span></a> <span class="k">return</span> <span class="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-789"><a href="#L-789"><span class="linenos">789</span></a>
-</span><span id="L-790"><a href="#L-790"><span class="linenos">790</span></a> <span class="k">def</span> <span class="nf">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-791"><a href="#L-791"><span class="linenos">791</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">):</span>
-</span><span id="L-792"><a href="#L-792"><span class="linenos">792</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="L-793"><a href="#L-793"><span class="linenos">793</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
-</span><span id="L-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="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-796"><a href="#L-796"><span class="linenos">796</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-797"><a href="#L-797"><span class="linenos">797</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span> <span class="o">==</span> <span class="s2">&quot;LEFT&quot;</span>
-</span><span id="L-798"><a href="#L-798"><span class="linenos">798</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">)</span>
-</span><span id="L-799"><a href="#L-799"><span class="linenos">799</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="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span>
-</span><span id="L-800"><a href="#L-800"><span class="linenos">800</span></a> <span class="p">):</span>
-</span><span id="L-801"><a href="#L-801"><span class="linenos">801</span></a> <span class="c1"># Some dialects support `LEFT JOIN UNNEST(...)` without an explicit ON clause</span>
-</span><span id="L-802"><a href="#L-802"><span class="linenos">802</span></a> <span class="c1"># DuckDB doesn&#39;t, but we can just add a dummy ON clause that is always true</span>
-</span><span id="L-803"><a href="#L-803"><span class="linenos">803</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()))</span>
-</span><span id="L-804"><a href="#L-804"><span class="linenos">804</span></a>
-</span><span id="L-805"><a href="#L-805"><span class="linenos">805</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-806"><a href="#L-806"><span class="linenos">806</span></a>
-</span><span id="L-807"><a href="#L-807"><span class="linenos">807</span></a> <span class="k">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-808"><a href="#L-808"><span class="linenos">808</span></a> <span class="c1"># GENERATE_SERIES(a, b) -&gt; [a, b], RANGE(a, b) -&gt; [a, b)</span>
-</span><span id="L-809"><a href="#L-809"><span class="linenos">809</span></a> <span class="k">if</span> <span class="n">expression</span><span class="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_end_exclusive&quot;</span><span class="p">):</span>
-</span><span id="L-810"><a href="#L-810"><span class="linenos">810</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANGE&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-811"><a href="#L-811"><span class="linenos">811</span></a>
-</span><span id="L-812"><a href="#L-812"><span class="linenos">812</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</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="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-815"><a href="#L-815"><span class="linenos">815</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-816"><a href="#L-816"><span class="linenos">816</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">Array</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="n">replace</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="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="n">bracket</span> <span class="o">=</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-820"><a href="#L-820"><span class="linenos">820</span></a>
-</span><span id="L-821"><a href="#L-821"><span class="linenos">821</span></a> <span class="k">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;returns_list_for_maps&quot;</span><span class="p">):</span>
-</span><span id="L-822"><a href="#L-822"><span class="linenos">822</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-823"><a href="#L-823"><span class="linenos">823</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-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="n">this</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-785"><a href="#L-785"><span class="linenos">785</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-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="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-788"><a href="#L-788"><span class="linenos">788</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">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-789"><a href="#L-789"><span class="linenos">789</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="L-790"><a href="#L-790"><span class="linenos">790</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
+</span><span id="L-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">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-793"><a href="#L-793"><span class="linenos">793</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-794"><a href="#L-794"><span class="linenos">794</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span> <span class="o">==</span> <span class="s2">&quot;LEFT&quot;</span>
+</span><span id="L-795"><a href="#L-795"><span class="linenos">795</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">)</span>
+</span><span id="L-796"><a href="#L-796"><span class="linenos">796</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="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span>
+</span><span id="L-797"><a href="#L-797"><span class="linenos">797</span></a> <span class="p">):</span>
+</span><span id="L-798"><a href="#L-798"><span class="linenos">798</span></a> <span class="c1"># Some dialects support `LEFT JOIN UNNEST(...)` without an explicit ON clause</span>
+</span><span id="L-799"><a href="#L-799"><span class="linenos">799</span></a> <span class="c1"># DuckDB doesn&#39;t, but we can just add a dummy ON clause that is always true</span>
+</span><span id="L-800"><a href="#L-800"><span class="linenos">800</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()))</span>
+</span><span id="L-801"><a href="#L-801"><span class="linenos">801</span></a>
+</span><span id="L-802"><a href="#L-802"><span class="linenos">802</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</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">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-805"><a href="#L-805"><span class="linenos">805</span></a> <span class="c1"># GENERATE_SERIES(a, b) -&gt; [a, b], RANGE(a, b) -&gt; [a, b)</span>
+</span><span id="L-806"><a href="#L-806"><span class="linenos">806</span></a> <span class="k">if</span> <span class="n">expression</span><span class="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_end_exclusive&quot;</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="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANGE&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-808"><a href="#L-808"><span class="linenos">808</span></a>
+</span><span id="L-809"><a href="#L-809"><span class="linenos">809</span></a> <span class="k">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-810"><a href="#L-810"><span class="linenos">810</span></a>
+</span><span id="L-811"><a href="#L-811"><span class="linenos">811</span></a> <span class="k">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-812"><a href="#L-812"><span class="linenos">812</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-813"><a href="#L-813"><span class="linenos">813</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">Array</span><span class="p">):</span>
+</span><span id="L-814"><a href="#L-814"><span class="linenos">814</span></a> <span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">this</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">bracket</span> <span class="o">=</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-817"><a href="#L-817"><span class="linenos">817</span></a>
+</span><span id="L-818"><a href="#L-818"><span class="linenos">818</span></a> <span class="k">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;returns_list_for_maps&quot;</span><span class="p">):</span>
+</span><span id="L-819"><a href="#L-819"><span class="linenos">819</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-820"><a href="#L-820"><span class="linenos">820</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-821"><a href="#L-821"><span class="linenos">821</span></a>
+</span><span id="L-822"><a href="#L-822"><span class="linenos">822</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">this</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">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">):</span>
+</span><span id="L-825"><a href="#L-825"><span class="linenos">825</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]&quot;</span>
</span><span id="L-826"><a href="#L-826"><span class="linenos">826</span></a>
-</span><span id="L-827"><a href="#L-827"><span class="linenos">827</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">):</span>
-</span><span id="L-828"><a href="#L-828"><span class="linenos">828</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]&quot;</span>
-</span><span id="L-829"><a href="#L-829"><span class="linenos">829</span></a>
-</span><span id="L-830"><a href="#L-830"><span class="linenos">830</span></a> <span class="k">return</span> <span class="n">bracket</span>
+</span><span id="L-827"><a href="#L-827"><span class="linenos">827</span></a> <span class="k">return</span> <span class="n">bracket</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">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-830"><a href="#L-830"><span class="linenos">830</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-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">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-833"><a href="#L-833"><span class="linenos">833</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-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="n">func</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</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">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PERCENTILES</span><span class="p">):</span>
-</span><span id="L-837"><a href="#L-837"><span class="linenos">837</span></a> <span class="c1"># Make the order key the first arg and slide the fraction to the right</span>
-</span><span id="L-838"><a href="#L-838"><span class="linenos">838</span></a> <span class="c1"># https://duckdb.org/docs/sql/aggregates#ordered-set-aggregate-functions</span>
-</span><span id="L-839"><a href="#L-839"><span class="linenos">839</span></a> <span class="n">order_col</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">Ordered</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="n">order_col</span><span class="p">:</span>
-</span><span id="L-841"><a href="#L-841"><span class="linenos">841</span></a> <span class="n">func</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">func</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-842"><a href="#L-842"><span class="linenos">842</span></a> <span class="n">func</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">order_col</span><span class="o">.</span><span class="n">this</span><span class="p">)</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="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span 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="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">)</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="k">return</span> <span 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">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-832"><a href="#L-832"><span class="linenos">832</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-833"><a href="#L-833"><span class="linenos">833</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">PERCENTILES</span><span class="p">):</span>
+</span><span id="L-834"><a href="#L-834"><span class="linenos">834</span></a> <span class="c1"># Make the order key the first arg and slide the fraction to the right</span>
+</span><span id="L-835"><a href="#L-835"><span class="linenos">835</span></a> <span class="c1"># https://duckdb.org/docs/sql/aggregates#ordered-set-aggregate-functions</span>
+</span><span id="L-836"><a href="#L-836"><span class="linenos">836</span></a> <span class="n">order_col</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">Ordered</span><span class="p">)</span>
+</span><span id="L-837"><a href="#L-837"><span class="linenos">837</span></a> <span class="k">if</span> <span class="n">order_col</span><span class="p">:</span>
+</span><span id="L-838"><a href="#L-838"><span class="linenos">838</span></a> <span class="n">func</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">func</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-839"><a href="#L-839"><span class="linenos">839</span></a> <span class="n">func</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">order_col</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-840"><a href="#L-840"><span class="linenos">840</span></a>
+</span><span id="L-841"><a href="#L-841"><span class="linenos">841</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span 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="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">)</span>
+</span><span id="L-842"><a href="#L-842"><span class="linenos">842</span></a>
+</span><span id="L-843"><a href="#L-843"><span class="linenos">843</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">this</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="L-844"><a href="#L-844"><span class="linenos">844</span></a>
+</span><span id="L-845"><a href="#L-845"><span class="linenos">845</span></a> <span class="k">def</span> <span class="nf">length_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-846"><a href="#L-846"><span class="linenos">846</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</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">def</span> <span class="nf">length_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-849"><a href="#L-849"><span class="linenos">849</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-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="c1"># Dialects like BQ and Snowflake also accept binary values as args, so</span>
-</span><span id="L-852"><a href="#L-852"><span class="linenos">852</span></a> <span class="c1"># DDB will attempt to infer the type or resort to case/when resolution</span>
-</span><span id="L-853"><a href="#L-853"><span class="linenos">853</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;binary&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="L-854"><a href="#L-854"><span class="linenos">854</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
+</span><span id="L-848"><a href="#L-848"><span class="linenos">848</span></a> <span class="c1"># Dialects like BQ and Snowflake also accept binary values as args, so</span>
+</span><span id="L-849"><a href="#L-849"><span class="linenos">849</span></a> <span class="c1"># DDB will attempt to infer the type or resort to case/when resolution</span>
+</span><span id="L-850"><a href="#L-850"><span class="linenos">850</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;binary&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="L-851"><a href="#L-851"><span class="linenos">851</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
+</span><span id="L-852"><a href="#L-852"><span class="linenos">852</span></a>
+</span><span id="L-853"><a href="#L-853"><span class="linenos">853</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">arg</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
+</span><span id="L-854"><a href="#L-854"><span class="linenos">854</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-855"><a href="#L-855"><span class="linenos">855</span></a>
-</span><span id="L-856"><a href="#L-856"><span class="linenos">856</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">arg</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
-</span><span id="L-857"><a href="#L-857"><span class="linenos">857</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-858"><a href="#L-858"><span class="linenos">858</span></a>
-</span><span id="L-859"><a href="#L-859"><span class="linenos">859</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="L-856"><a href="#L-856"><span class="linenos">856</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="L-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">if</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="o">*</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span><span class="p">):</span>
+</span><span id="L-859"><a href="#L-859"><span class="linenos">859</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
</span><span id="L-860"><a href="#L-860"><span class="linenos">860</span></a>
-</span><span id="L-861"><a href="#L-861"><span class="linenos">861</span></a> <span class="k">if</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="o">*</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span><span class="p">):</span>
-</span><span id="L-862"><a href="#L-862"><span class="linenos">862</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</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="c1"># We need these casts to make duckdb&#39;s static type checker happy</span>
-</span><span id="L-865"><a href="#L-865"><span class="linenos">865</span></a> <span class="n">blob</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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><span id="L-866"><a href="#L-866"><span class="linenos">866</span></a> <span class="n">varchar</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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-867"><a href="#L-867"><span class="linenos">867</span></a>
-</span><span id="L-868"><a href="#L-868"><span class="linenos">868</span></a> <span class="n">case</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-869"><a href="#L-869"><span class="linenos">869</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">case</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;TYPEOF&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">))</span>
-</span><span id="L-870"><a href="#L-870"><span class="linenos">870</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span>
-</span><span id="L-871"><a href="#L-871"><span class="linenos">871</span></a> <span class="s2">&quot;&#39;VARCHAR&#39;&quot;</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;LENGTH&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">varchar</span><span class="p">])</span>
-</span><span id="L-872"><a href="#L-872"><span class="linenos">872</span></a> <span class="p">)</span> <span class="c1"># anonymous to break length_sql recursion</span>
-</span><span id="L-873"><a href="#L-873"><span class="linenos">873</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="s2">&quot;&#39;BLOB&#39;&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;OCTET_LENGTH&quot;</span><span class="p">,</span> <span class="n">blob</span><span class="p">))</span>
-</span><span id="L-874"><a href="#L-874"><span class="linenos">874</span></a> <span class="p">)</span>
-</span><span id="L-875"><a href="#L-875"><span class="linenos">875</span></a>
-</span><span id="L-876"><a href="#L-876"><span class="linenos">876</span></a> <span 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-877"><a href="#L-877"><span class="linenos">877</span></a>
-</span><span id="L-878"><a href="#L-878"><span class="linenos">878</span></a> <span class="k">def</span> <span class="nf">objectinsert_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ObjectInsert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-879"><a href="#L-879"><span class="linenos">879</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-880"><a href="#L-880"><span class="linenos">880</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;key&quot;</span><span class="p">)</span>
-</span><span id="L-881"><a href="#L-881"><span class="linenos">881</span></a> <span class="n">key_sql</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">key</span><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-882"><a href="#L-882"><span class="linenos">882</span></a> <span class="n">value_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">)</span>
-</span><span id="L-883"><a href="#L-883"><span class="linenos">883</span></a>
-</span><span id="L-884"><a href="#L-884"><span class="linenos">884</span></a> <span class="n">kv_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">key_sql</span><span class="si">}</span><span class="s2"> := </span><span class="si">{</span><span class="n">value_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-885"><a href="#L-885"><span class="linenos">885</span></a>
-</span><span id="L-886"><a href="#L-886"><span class="linenos">886</span></a> <span class="c1"># If the input struct is empty e.g. transpiling OBJECT_INSERT(OBJECT_CONSTRUCT(), key, value) from Snowflake</span>
-</span><span id="L-887"><a href="#L-887"><span class="linenos">887</span></a> <span class="c1"># then we can generate STRUCT_PACK which will build it since STRUCT_INSERT({}, key := value) is not valid DuckDB</span>
-</span><span id="L-888"><a href="#L-888"><span class="linenos">888</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">Struct</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">expressions</span><span class="p">:</span>
-</span><span id="L-889"><a href="#L-889"><span class="linenos">889</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_PACK&quot;</span><span class="p">,</span> <span class="n">kv_sql</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_INSERT&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">kv_sql</span><span class="p">)</span>
-</span><span id="L-892"><a href="#L-892"><span class="linenos">892</span></a>
-</span><span id="L-893"><a href="#L-893"><span class="linenos">893</span></a> <span class="k">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-894"><a href="#L-894"><span class="linenos">894</span></a> <span class="n">explode_array</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;explode_array&quot;</span><span class="p">)</span>
-</span><span id="L-895"><a href="#L-895"><span class="linenos">895</span></a> <span class="k">if</span> <span class="n">explode_array</span><span class="p">:</span>
-</span><span id="L-896"><a href="#L-896"><span class="linenos">896</span></a> <span class="c1"># In BigQuery, UNNESTing a nested array leads to explosion of the top-level array &amp; struct</span>
-</span><span id="L-897"><a href="#L-897"><span class="linenos">897</span></a> <span class="c1"># This is transpiled to DDB by transforming &quot;FROM UNNEST(...)&quot; to &quot;FROM (SELECT UNNEST(..., max_depth =&gt; 2))&quot;</span>
-</span><span id="L-898"><a href="#L-898"><span class="linenos">898</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-899"><a href="#L-899"><span class="linenos">899</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">(</span><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="s2">&quot;max_depth&quot;</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-900"><a href="#L-900"><span class="linenos">900</span></a> <span class="p">)</span>
-</span><span id="L-901"><a href="#L-901"><span class="linenos">901</span></a>
-</span><span id="L-902"><a href="#L-902"><span class="linenos">902</span></a> <span class="c1"># If BQ&#39;s UNNEST is aliased, we transform it from a column alias to a table alias in DDB</span>
-</span><span id="L-903"><a href="#L-903"><span class="linenos">903</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-904"><a href="#L-904"><span class="linenos">904</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-905"><a href="#L-905"><span class="linenos">905</span></a> <span class="n">expression</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-906"><a href="#L-906"><span class="linenos">906</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">seq_get</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">),</span> <span class="mi">0</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="n">unnest_sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-909"><a href="#L-909"><span class="linenos">909</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">unnest_sql</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-910"><a href="#L-910"><span class="linenos">910</span></a> <span 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">select</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">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-861"><a href="#L-861"><span class="linenos">861</span></a> <span class="c1"># We need these casts to make duckdb&#39;s static type checker happy</span>
+</span><span id="L-862"><a href="#L-862"><span class="linenos">862</span></a> <span class="n">blob</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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><span id="L-863"><a href="#L-863"><span class="linenos">863</span></a> <span class="n">varchar</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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-864"><a href="#L-864"><span class="linenos">864</span></a>
+</span><span id="L-865"><a href="#L-865"><span class="linenos">865</span></a> <span class="n">case</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-866"><a href="#L-866"><span class="linenos">866</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">case</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;TYPEOF&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">))</span>
+</span><span id="L-867"><a href="#L-867"><span class="linenos">867</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span>
+</span><span id="L-868"><a href="#L-868"><span class="linenos">868</span></a> <span class="s2">&quot;&#39;VARCHAR&#39;&quot;</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;LENGTH&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">varchar</span><span class="p">])</span>
+</span><span id="L-869"><a href="#L-869"><span class="linenos">869</span></a> <span class="p">)</span> <span class="c1"># anonymous to break length_sql recursion</span>
+</span><span id="L-870"><a href="#L-870"><span class="linenos">870</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="s2">&quot;&#39;BLOB&#39;&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;OCTET_LENGTH&quot;</span><span class="p">,</span> <span class="n">blob</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="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-874"><a href="#L-874"><span class="linenos">874</span></a>
+</span><span id="L-875"><a href="#L-875"><span class="linenos">875</span></a> <span class="k">def</span> <span class="nf">objectinsert_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ObjectInsert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-876"><a href="#L-876"><span class="linenos">876</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-877"><a href="#L-877"><span class="linenos">877</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;key&quot;</span><span class="p">)</span>
+</span><span id="L-878"><a href="#L-878"><span class="linenos">878</span></a> <span class="n">key_sql</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">key</span><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-879"><a href="#L-879"><span class="linenos">879</span></a> <span class="n">value_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">)</span>
+</span><span id="L-880"><a href="#L-880"><span class="linenos">880</span></a>
+</span><span id="L-881"><a href="#L-881"><span class="linenos">881</span></a> <span class="n">kv_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">key_sql</span><span class="si">}</span><span class="s2"> := </span><span class="si">{</span><span class="n">value_sql</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><span id="L-883"><a href="#L-883"><span class="linenos">883</span></a> <span class="c1"># If the input struct is empty e.g. transpiling OBJECT_INSERT(OBJECT_CONSTRUCT(), key, value) from Snowflake</span>
+</span><span id="L-884"><a href="#L-884"><span class="linenos">884</span></a> <span class="c1"># then we can generate STRUCT_PACK which will build it since STRUCT_INSERT({}, key := value) is not valid DuckDB</span>
+</span><span id="L-885"><a href="#L-885"><span class="linenos">885</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">Struct</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">expressions</span><span class="p">:</span>
+</span><span id="L-886"><a href="#L-886"><span class="linenos">886</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_PACK&quot;</span><span class="p">,</span> <span class="n">kv_sql</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_INSERT&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">kv_sql</span><span class="p">)</span>
+</span><span id="L-889"><a href="#L-889"><span class="linenos">889</span></a>
+</span><span id="L-890"><a href="#L-890"><span class="linenos">890</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-891"><a href="#L-891"><span class="linenos">891</span></a> <span class="n">explode_array</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;explode_array&quot;</span><span class="p">)</span>
+</span><span id="L-892"><a href="#L-892"><span class="linenos">892</span></a> <span class="k">if</span> <span class="n">explode_array</span><span class="p">:</span>
+</span><span id="L-893"><a href="#L-893"><span class="linenos">893</span></a> <span class="c1"># In BigQuery, UNNESTing a nested array leads to explosion of the top-level array &amp; struct</span>
+</span><span id="L-894"><a href="#L-894"><span class="linenos">894</span></a> <span class="c1"># This is transpiled to DDB by transforming &quot;FROM UNNEST(...)&quot; to &quot;FROM (SELECT UNNEST(..., max_depth =&gt; 2))&quot;</span>
+</span><span id="L-895"><a href="#L-895"><span class="linenos">895</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-896"><a href="#L-896"><span class="linenos">896</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">(</span><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="s2">&quot;max_depth&quot;</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-897"><a href="#L-897"><span class="linenos">897</span></a> <span class="p">)</span>
+</span><span id="L-898"><a href="#L-898"><span class="linenos">898</span></a>
+</span><span id="L-899"><a href="#L-899"><span class="linenos">899</span></a> <span class="c1"># If BQ&#39;s UNNEST is aliased, we transform it from a column alias to a table alias in DDB</span>
+</span><span id="L-900"><a href="#L-900"><span class="linenos">900</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-901"><a href="#L-901"><span class="linenos">901</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-902"><a href="#L-902"><span class="linenos">902</span></a> <span class="n">expression</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-903"><a href="#L-903"><span class="linenos">903</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">seq_get</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">),</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="L-904"><a href="#L-904"><span class="linenos">904</span></a>
+</span><span id="L-905"><a href="#L-905"><span class="linenos">905</span></a> <span class="n">unnest_sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-906"><a href="#L-906"><span class="linenos">906</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">unnest_sql</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-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">sql</span><span class="p">(</span><span class="n">select</span><span class="p">)</span>
+</span><span id="L-908"><a href="#L-908"><span class="linenos">908</span></a>
+</span><span id="L-909"><a href="#L-909"><span class="linenos">909</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -1846,163 +1843,160 @@
</span><span id="DuckDB-754"><a href="#DuckDB-754"><span class="linenos">754</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
</span><span id="DuckDB-755"><a href="#DuckDB-755"><span class="linenos">755</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="DuckDB-756"><a href="#DuckDB-756"><span class="linenos">756</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="DuckDB-757"><a href="#DuckDB-757"><span class="linenos">757</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
-</span><span id="DuckDB-758"><a href="#DuckDB-758"><span class="linenos">758</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DuckDB-759"><a href="#DuckDB-759"><span class="linenos">759</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB-760"><a href="#DuckDB-760"><span class="linenos">760</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
-</span><span id="DuckDB-761"><a href="#DuckDB-761"><span class="linenos">761</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
-</span><span id="DuckDB-762"><a href="#DuckDB-762"><span class="linenos">762</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
-</span><span id="DuckDB-763"><a href="#DuckDB-763"><span class="linenos">763</span></a>
-</span><span id="DuckDB-764"><a href="#DuckDB-764"><span class="linenos">764</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;size&quot;</span><span class="p">):</span>
-</span><span id="DuckDB-765"><a href="#DuckDB-765"><span class="linenos">765</span></a> <span class="n">method</span> <span class="o">=</span> <span class="n">expression</span><span class="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="DuckDB-766"><a href="#DuckDB-766"><span class="linenos">766</span></a> <span class="k">if</span> <span class="n">method</span> <span class="ow">and</span> <span class="n">method</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;RESERVOIR&quot;</span><span class="p">:</span>
-</span><span id="DuckDB-767"><a href="#DuckDB-767"><span class="linenos">767</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
-</span><span id="DuckDB-768"><a href="#DuckDB-768"><span class="linenos">768</span></a> <span class="sa">f</span><span class="s2">&quot;Sampling method </span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2"> is not supported with a discrete sample count, &quot;</span>
-</span><span id="DuckDB-769"><a href="#DuckDB-769"><span class="linenos">769</span></a> <span class="s2">&quot;defaulting to reservoir sampling&quot;</span>
-</span><span id="DuckDB-770"><a href="#DuckDB-770"><span class="linenos">770</span></a> <span class="p">)</span>
-</span><span id="DuckDB-771"><a href="#DuckDB-771"><span class="linenos">771</span></a> <span class="n">expression</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">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;RESERVOIR&quot;</span><span class="p">))</span>
-</span><span id="DuckDB-772"><a href="#DuckDB-772"><span class="linenos">772</span></a>
-</span><span id="DuckDB-773"><a href="#DuckDB-773"><span class="linenos">773</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tablesample_sql</span><span class="p">(</span>
-</span><span id="DuckDB-774"><a href="#DuckDB-774"><span class="linenos">774</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span>
-</span><span id="DuckDB-775"><a href="#DuckDB-775"><span class="linenos">775</span></a> <span class="p">)</span>
-</span><span id="DuckDB-776"><a href="#DuckDB-776"><span class="linenos">776</span></a>
-</span><span id="DuckDB-777"><a href="#DuckDB-777"><span class="linenos">777</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-778"><a href="#DuckDB-778"><span class="linenos">778</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-779"><a href="#DuckDB-779"><span class="linenos">779</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-780"><a href="#DuckDB-780"><span class="linenos">780</span></a>
-</span><span id="DuckDB-781"><a href="#DuckDB-781"><span class="linenos">781</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-782"><a href="#DuckDB-782"><span class="linenos">782</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
-</span><span id="DuckDB-783"><a href="#DuckDB-783"><span class="linenos">783</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-784"><a href="#DuckDB-784"><span class="linenos">784</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
+</span><span id="DuckDB-757"><a href="#DuckDB-757"><span class="linenos">757</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DuckDB-758"><a href="#DuckDB-758"><span class="linenos">758</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB-759"><a href="#DuckDB-759"><span class="linenos">759</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
+</span><span id="DuckDB-760"><a href="#DuckDB-760"><span class="linenos">760</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
+</span><span id="DuckDB-761"><a href="#DuckDB-761"><span class="linenos">761</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
+</span><span id="DuckDB-762"><a href="#DuckDB-762"><span class="linenos">762</span></a>
+</span><span id="DuckDB-763"><a href="#DuckDB-763"><span class="linenos">763</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;size&quot;</span><span class="p">):</span>
+</span><span id="DuckDB-764"><a href="#DuckDB-764"><span class="linenos">764</span></a> <span class="n">method</span> <span class="o">=</span> <span class="n">expression</span><span class="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="DuckDB-765"><a href="#DuckDB-765"><span class="linenos">765</span></a> <span class="k">if</span> <span class="n">method</span> <span class="ow">and</span> <span class="n">method</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;RESERVOIR&quot;</span><span class="p">:</span>
+</span><span id="DuckDB-766"><a href="#DuckDB-766"><span class="linenos">766</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
+</span><span id="DuckDB-767"><a href="#DuckDB-767"><span class="linenos">767</span></a> <span class="sa">f</span><span class="s2">&quot;Sampling method </span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2"> is not supported with a discrete sample count, &quot;</span>
+</span><span id="DuckDB-768"><a href="#DuckDB-768"><span class="linenos">768</span></a> <span class="s2">&quot;defaulting to reservoir sampling&quot;</span>
+</span><span id="DuckDB-769"><a href="#DuckDB-769"><span class="linenos">769</span></a> <span class="p">)</span>
+</span><span id="DuckDB-770"><a href="#DuckDB-770"><span class="linenos">770</span></a> <span class="n">expression</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">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;RESERVOIR&quot;</span><span class="p">))</span>
+</span><span id="DuckDB-771"><a href="#DuckDB-771"><span class="linenos">771</span></a>
+</span><span id="DuckDB-772"><a href="#DuckDB-772"><span class="linenos">772</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">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span><span class="p">)</span>
+</span><span id="DuckDB-773"><a href="#DuckDB-773"><span class="linenos">773</span></a>
+</span><span id="DuckDB-774"><a href="#DuckDB-774"><span class="linenos">774</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-775"><a href="#DuckDB-775"><span class="linenos">775</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-776"><a href="#DuckDB-776"><span class="linenos">776</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-777"><a href="#DuckDB-777"><span class="linenos">777</span></a>
+</span><span id="DuckDB-778"><a href="#DuckDB-778"><span class="linenos">778</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-779"><a href="#DuckDB-779"><span class="linenos">779</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
+</span><span id="DuckDB-780"><a href="#DuckDB-780"><span class="linenos">780</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-781"><a href="#DuckDB-781"><span class="linenos">781</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
+</span><span id="DuckDB-782"><a href="#DuckDB-782"><span class="linenos">782</span></a>
+</span><span id="DuckDB-783"><a href="#DuckDB-783"><span class="linenos">783</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
+</span><span id="DuckDB-784"><a href="#DuckDB-784"><span class="linenos">784</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="DuckDB-785"><a href="#DuckDB-785"><span class="linenos">785</span></a>
-</span><span id="DuckDB-786"><a href="#DuckDB-786"><span class="linenos">786</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
-</span><span id="DuckDB-787"><a href="#DuckDB-787"><span class="linenos">787</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="DuckDB-788"><a href="#DuckDB-788"><span class="linenos">788</span></a>
-</span><span id="DuckDB-789"><a href="#DuckDB-789"><span class="linenos">789</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-790"><a href="#DuckDB-790"><span class="linenos">790</span></a>
-</span><span id="DuckDB-791"><a href="#DuckDB-791"><span class="linenos">791</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB-792"><a href="#DuckDB-792"><span class="linenos">792</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">):</span>
-</span><span id="DuckDB-793"><a href="#DuckDB-793"><span class="linenos">793</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="DuckDB-794"><a href="#DuckDB-794"><span class="linenos">794</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
-</span><span id="DuckDB-795"><a href="#DuckDB-795"><span class="linenos">795</span></a>
-</span><span id="DuckDB-796"><a href="#DuckDB-796"><span class="linenos">796</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="DuckDB-797"><a href="#DuckDB-797"><span class="linenos">797</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="DuckDB-798"><a href="#DuckDB-798"><span class="linenos">798</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span> <span class="o">==</span> <span class="s2">&quot;LEFT&quot;</span>
-</span><span id="DuckDB-799"><a href="#DuckDB-799"><span class="linenos">799</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">)</span>
-</span><span id="DuckDB-800"><a href="#DuckDB-800"><span class="linenos">800</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="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span>
-</span><span id="DuckDB-801"><a href="#DuckDB-801"><span class="linenos">801</span></a> <span class="p">):</span>
-</span><span id="DuckDB-802"><a href="#DuckDB-802"><span class="linenos">802</span></a> <span class="c1"># Some dialects support `LEFT JOIN UNNEST(...)` without an explicit ON clause</span>
-</span><span id="DuckDB-803"><a href="#DuckDB-803"><span class="linenos">803</span></a> <span class="c1"># DuckDB doesn&#39;t, but we can just add a dummy ON clause that is always true</span>
-</span><span id="DuckDB-804"><a href="#DuckDB-804"><span class="linenos">804</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()))</span>
-</span><span id="DuckDB-805"><a href="#DuckDB-805"><span class="linenos">805</span></a>
-</span><span id="DuckDB-806"><a href="#DuckDB-806"><span class="linenos">806</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB-807"><a href="#DuckDB-807"><span class="linenos">807</span></a>
-</span><span id="DuckDB-808"><a href="#DuckDB-808"><span class="linenos">808</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="DuckDB-809"><a href="#DuckDB-809"><span class="linenos">809</span></a> <span class="c1"># GENERATE_SERIES(a, b) -&gt; [a, b], RANGE(a, b) -&gt; [a, b)</span>
-</span><span id="DuckDB-810"><a href="#DuckDB-810"><span class="linenos">810</span></a> <span class="k">if</span> <span class="n">expression</span><span class="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_end_exclusive&quot;</span><span class="p">):</span>
-</span><span id="DuckDB-811"><a href="#DuckDB-811"><span class="linenos">811</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANGE&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB-812"><a href="#DuckDB-812"><span class="linenos">812</span></a>
-</span><span id="DuckDB-813"><a href="#DuckDB-813"><span class="linenos">813</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="DuckDB-814"><a href="#DuckDB-814"><span class="linenos">814</span></a>
-</span><span id="DuckDB-815"><a href="#DuckDB-815"><span class="linenos">815</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="DuckDB-816"><a href="#DuckDB-816"><span class="linenos">816</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="DuckDB-817"><a href="#DuckDB-817"><span class="linenos">817</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">Array</span><span class="p">):</span>
-</span><span id="DuckDB-818"><a href="#DuckDB-818"><span class="linenos">818</span></a> <span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
-</span><span id="DuckDB-819"><a href="#DuckDB-819"><span class="linenos">819</span></a>
-</span><span id="DuckDB-820"><a href="#DuckDB-820"><span class="linenos">820</span></a> <span class="n">bracket</span> <span class="o">=</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="DuckDB-821"><a href="#DuckDB-821"><span class="linenos">821</span></a>
-</span><span id="DuckDB-822"><a href="#DuckDB-822"><span class="linenos">822</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;returns_list_for_maps&quot;</span><span class="p">):</span>
-</span><span id="DuckDB-823"><a href="#DuckDB-823"><span class="linenos">823</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="DuckDB-824"><a href="#DuckDB-824"><span class="linenos">824</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="DuckDB-825"><a href="#DuckDB-825"><span class="linenos">825</span></a>
-</span><span id="DuckDB-826"><a href="#DuckDB-826"><span class="linenos">826</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="DuckDB-786"><a href="#DuckDB-786"><span class="linenos">786</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-787"><a href="#DuckDB-787"><span class="linenos">787</span></a>
+</span><span id="DuckDB-788"><a href="#DuckDB-788"><span class="linenos">788</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB-789"><a href="#DuckDB-789"><span class="linenos">789</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">):</span>
+</span><span id="DuckDB-790"><a href="#DuckDB-790"><span class="linenos">790</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="DuckDB-791"><a href="#DuckDB-791"><span class="linenos">791</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
+</span><span id="DuckDB-792"><a href="#DuckDB-792"><span class="linenos">792</span></a>
+</span><span id="DuckDB-793"><a href="#DuckDB-793"><span class="linenos">793</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="DuckDB-794"><a href="#DuckDB-794"><span class="linenos">794</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="DuckDB-795"><a href="#DuckDB-795"><span class="linenos">795</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span> <span class="o">==</span> <span class="s2">&quot;LEFT&quot;</span>
+</span><span id="DuckDB-796"><a href="#DuckDB-796"><span class="linenos">796</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">)</span>
+</span><span id="DuckDB-797"><a href="#DuckDB-797"><span class="linenos">797</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="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span>
+</span><span id="DuckDB-798"><a href="#DuckDB-798"><span class="linenos">798</span></a> <span class="p">):</span>
+</span><span id="DuckDB-799"><a href="#DuckDB-799"><span class="linenos">799</span></a> <span class="c1"># Some dialects support `LEFT JOIN UNNEST(...)` without an explicit ON clause</span>
+</span><span id="DuckDB-800"><a href="#DuckDB-800"><span class="linenos">800</span></a> <span class="c1"># DuckDB doesn&#39;t, but we can just add a dummy ON clause that is always true</span>
+</span><span id="DuckDB-801"><a href="#DuckDB-801"><span class="linenos">801</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()))</span>
+</span><span id="DuckDB-802"><a href="#DuckDB-802"><span class="linenos">802</span></a>
+</span><span id="DuckDB-803"><a href="#DuckDB-803"><span class="linenos">803</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB-804"><a href="#DuckDB-804"><span class="linenos">804</span></a>
+</span><span id="DuckDB-805"><a href="#DuckDB-805"><span class="linenos">805</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="DuckDB-806"><a href="#DuckDB-806"><span class="linenos">806</span></a> <span class="c1"># GENERATE_SERIES(a, b) -&gt; [a, b], RANGE(a, b) -&gt; [a, b)</span>
+</span><span id="DuckDB-807"><a href="#DuckDB-807"><span class="linenos">807</span></a> <span class="k">if</span> <span class="n">expression</span><span class="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_end_exclusive&quot;</span><span class="p">):</span>
+</span><span id="DuckDB-808"><a href="#DuckDB-808"><span class="linenos">808</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANGE&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB-809"><a href="#DuckDB-809"><span class="linenos">809</span></a>
+</span><span id="DuckDB-810"><a href="#DuckDB-810"><span class="linenos">810</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="DuckDB-811"><a href="#DuckDB-811"><span class="linenos">811</span></a>
+</span><span id="DuckDB-812"><a href="#DuckDB-812"><span class="linenos">812</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="DuckDB-813"><a href="#DuckDB-813"><span class="linenos">813</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="DuckDB-814"><a href="#DuckDB-814"><span class="linenos">814</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">Array</span><span class="p">):</span>
+</span><span id="DuckDB-815"><a href="#DuckDB-815"><span class="linenos">815</span></a> <span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
+</span><span id="DuckDB-816"><a href="#DuckDB-816"><span class="linenos">816</span></a>
+</span><span id="DuckDB-817"><a href="#DuckDB-817"><span class="linenos">817</span></a> <span class="n">bracket</span> <span class="o">=</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="DuckDB-818"><a href="#DuckDB-818"><span class="linenos">818</span></a>
+</span><span id="DuckDB-819"><a href="#DuckDB-819"><span class="linenos">819</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;returns_list_for_maps&quot;</span><span class="p">):</span>
+</span><span id="DuckDB-820"><a href="#DuckDB-820"><span class="linenos">820</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="DuckDB-821"><a href="#DuckDB-821"><span class="linenos">821</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="DuckDB-822"><a href="#DuckDB-822"><span class="linenos">822</span></a>
+</span><span id="DuckDB-823"><a href="#DuckDB-823"><span class="linenos">823</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="DuckDB-824"><a href="#DuckDB-824"><span class="linenos">824</span></a>
+</span><span id="DuckDB-825"><a href="#DuckDB-825"><span class="linenos">825</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">):</span>
+</span><span id="DuckDB-826"><a href="#DuckDB-826"><span class="linenos">826</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]&quot;</span>
</span><span id="DuckDB-827"><a href="#DuckDB-827"><span class="linenos">827</span></a>
-</span><span id="DuckDB-828"><a href="#DuckDB-828"><span class="linenos">828</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">):</span>
-</span><span id="DuckDB-829"><a href="#DuckDB-829"><span class="linenos">829</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]&quot;</span>
-</span><span id="DuckDB-830"><a href="#DuckDB-830"><span class="linenos">830</span></a>
-</span><span id="DuckDB-831"><a href="#DuckDB-831"><span class="linenos">831</span></a> <span class="k">return</span> <span class="n">bracket</span>
+</span><span id="DuckDB-828"><a href="#DuckDB-828"><span class="linenos">828</span></a> <span class="k">return</span> <span class="n">bracket</span>
+</span><span id="DuckDB-829"><a href="#DuckDB-829"><span class="linenos">829</span></a>
+</span><span id="DuckDB-830"><a href="#DuckDB-830"><span class="linenos">830</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="DuckDB-831"><a href="#DuckDB-831"><span class="linenos">831</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="DuckDB-832"><a href="#DuckDB-832"><span class="linenos">832</span></a>
-</span><span id="DuckDB-833"><a href="#DuckDB-833"><span class="linenos">833</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="DuckDB-834"><a href="#DuckDB-834"><span class="linenos">834</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="DuckDB-835"><a href="#DuckDB-835"><span class="linenos">835</span></a>
-</span><span id="DuckDB-836"><a href="#DuckDB-836"><span class="linenos">836</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="DuckDB-837"><a href="#DuckDB-837"><span class="linenos">837</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">PERCENTILES</span><span class="p">):</span>
-</span><span id="DuckDB-838"><a href="#DuckDB-838"><span class="linenos">838</span></a> <span class="c1"># Make the order key the first arg and slide the fraction to the right</span>
-</span><span id="DuckDB-839"><a href="#DuckDB-839"><span class="linenos">839</span></a> <span class="c1"># https://duckdb.org/docs/sql/aggregates#ordered-set-aggregate-functions</span>
-</span><span id="DuckDB-840"><a href="#DuckDB-840"><span class="linenos">840</span></a> <span class="n">order_col</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">Ordered</span><span class="p">)</span>
-</span><span id="DuckDB-841"><a href="#DuckDB-841"><span class="linenos">841</span></a> <span class="k">if</span> <span class="n">order_col</span><span class="p">:</span>
-</span><span id="DuckDB-842"><a href="#DuckDB-842"><span class="linenos">842</span></a> <span class="n">func</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">func</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="DuckDB-843"><a href="#DuckDB-843"><span class="linenos">843</span></a> <span class="n">func</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">order_col</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="DuckDB-844"><a href="#DuckDB-844"><span class="linenos">844</span></a>
-</span><span id="DuckDB-845"><a href="#DuckDB-845"><span class="linenos">845</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span 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="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">)</span>
-</span><span id="DuckDB-846"><a href="#DuckDB-846"><span class="linenos">846</span></a>
-</span><span id="DuckDB-847"><a href="#DuckDB-847"><span class="linenos">847</span></a> <span class="k">return</span> <span 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">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="DuckDB-833"><a href="#DuckDB-833"><span class="linenos">833</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="DuckDB-834"><a href="#DuckDB-834"><span class="linenos">834</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">PERCENTILES</span><span class="p">):</span>
+</span><span id="DuckDB-835"><a href="#DuckDB-835"><span class="linenos">835</span></a> <span class="c1"># Make the order key the first arg and slide the fraction to the right</span>
+</span><span id="DuckDB-836"><a href="#DuckDB-836"><span class="linenos">836</span></a> <span class="c1"># https://duckdb.org/docs/sql/aggregates#ordered-set-aggregate-functions</span>
+</span><span id="DuckDB-837"><a href="#DuckDB-837"><span class="linenos">837</span></a> <span class="n">order_col</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">Ordered</span><span class="p">)</span>
+</span><span id="DuckDB-838"><a href="#DuckDB-838"><span class="linenos">838</span></a> <span class="k">if</span> <span class="n">order_col</span><span class="p">:</span>
+</span><span id="DuckDB-839"><a href="#DuckDB-839"><span class="linenos">839</span></a> <span class="n">func</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">func</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="DuckDB-840"><a href="#DuckDB-840"><span class="linenos">840</span></a> <span class="n">func</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">order_col</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="DuckDB-841"><a href="#DuckDB-841"><span class="linenos">841</span></a>
+</span><span id="DuckDB-842"><a href="#DuckDB-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 class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">)</span>
+</span><span id="DuckDB-843"><a href="#DuckDB-843"><span class="linenos">843</span></a>
+</span><span id="DuckDB-844"><a href="#DuckDB-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="n">this</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="DuckDB-845"><a href="#DuckDB-845"><span class="linenos">845</span></a>
+</span><span id="DuckDB-846"><a href="#DuckDB-846"><span class="linenos">846</span></a> <span class="k">def</span> <span class="nf">length_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB-847"><a href="#DuckDB-847"><span class="linenos">847</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="DuckDB-848"><a href="#DuckDB-848"><span class="linenos">848</span></a>
-</span><span id="DuckDB-849"><a href="#DuckDB-849"><span class="linenos">849</span></a> <span class="k">def</span> <span class="nf">length_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB-850"><a href="#DuckDB-850"><span class="linenos">850</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="DuckDB-851"><a href="#DuckDB-851"><span class="linenos">851</span></a>
-</span><span id="DuckDB-852"><a href="#DuckDB-852"><span class="linenos">852</span></a> <span class="c1"># Dialects like BQ and Snowflake also accept binary values as args, so</span>
-</span><span id="DuckDB-853"><a href="#DuckDB-853"><span class="linenos">853</span></a> <span class="c1"># DDB will attempt to infer the type or resort to case/when resolution</span>
-</span><span id="DuckDB-854"><a href="#DuckDB-854"><span class="linenos">854</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;binary&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="DuckDB-855"><a href="#DuckDB-855"><span class="linenos">855</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
+</span><span id="DuckDB-849"><a href="#DuckDB-849"><span class="linenos">849</span></a> <span class="c1"># Dialects like BQ and Snowflake also accept binary values as args, so</span>
+</span><span id="DuckDB-850"><a href="#DuckDB-850"><span class="linenos">850</span></a> <span class="c1"># DDB will attempt to infer the type or resort to case/when resolution</span>
+</span><span id="DuckDB-851"><a href="#DuckDB-851"><span class="linenos">851</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;binary&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="DuckDB-852"><a href="#DuckDB-852"><span class="linenos">852</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
+</span><span id="DuckDB-853"><a href="#DuckDB-853"><span class="linenos">853</span></a>
+</span><span id="DuckDB-854"><a href="#DuckDB-854"><span class="linenos">854</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">arg</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
+</span><span id="DuckDB-855"><a href="#DuckDB-855"><span class="linenos">855</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="DuckDB-856"><a href="#DuckDB-856"><span class="linenos">856</span></a>
-</span><span id="DuckDB-857"><a href="#DuckDB-857"><span class="linenos">857</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">arg</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
-</span><span id="DuckDB-858"><a href="#DuckDB-858"><span class="linenos">858</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="DuckDB-859"><a href="#DuckDB-859"><span class="linenos">859</span></a>
-</span><span id="DuckDB-860"><a href="#DuckDB-860"><span class="linenos">860</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="DuckDB-857"><a href="#DuckDB-857"><span class="linenos">857</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="DuckDB-858"><a href="#DuckDB-858"><span class="linenos">858</span></a>
+</span><span id="DuckDB-859"><a href="#DuckDB-859"><span class="linenos">859</span></a> <span class="k">if</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="o">*</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span><span class="p">):</span>
+</span><span id="DuckDB-860"><a href="#DuckDB-860"><span class="linenos">860</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
</span><span id="DuckDB-861"><a href="#DuckDB-861"><span class="linenos">861</span></a>
-</span><span id="DuckDB-862"><a href="#DuckDB-862"><span class="linenos">862</span></a> <span class="k">if</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="o">*</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span><span class="p">):</span>
-</span><span id="DuckDB-863"><a href="#DuckDB-863"><span class="linenos">863</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
-</span><span id="DuckDB-864"><a href="#DuckDB-864"><span class="linenos">864</span></a>
-</span><span id="DuckDB-865"><a href="#DuckDB-865"><span class="linenos">865</span></a> <span class="c1"># We need these casts to make duckdb&#39;s static type checker happy</span>
-</span><span id="DuckDB-866"><a href="#DuckDB-866"><span class="linenos">866</span></a> <span class="n">blob</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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><span id="DuckDB-867"><a href="#DuckDB-867"><span class="linenos">867</span></a> <span class="n">varchar</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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="DuckDB-868"><a href="#DuckDB-868"><span class="linenos">868</span></a>
-</span><span id="DuckDB-869"><a href="#DuckDB-869"><span class="linenos">869</span></a> <span class="n">case</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="DuckDB-870"><a href="#DuckDB-870"><span class="linenos">870</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">case</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;TYPEOF&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">))</span>
-</span><span id="DuckDB-871"><a href="#DuckDB-871"><span class="linenos">871</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span>
-</span><span id="DuckDB-872"><a href="#DuckDB-872"><span class="linenos">872</span></a> <span class="s2">&quot;&#39;VARCHAR&#39;&quot;</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;LENGTH&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">varchar</span><span class="p">])</span>
-</span><span id="DuckDB-873"><a href="#DuckDB-873"><span class="linenos">873</span></a> <span class="p">)</span> <span class="c1"># anonymous to break length_sql recursion</span>
-</span><span id="DuckDB-874"><a href="#DuckDB-874"><span class="linenos">874</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="s2">&quot;&#39;BLOB&#39;&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;OCTET_LENGTH&quot;</span><span class="p">,</span> <span class="n">blob</span><span class="p">))</span>
-</span><span id="DuckDB-875"><a href="#DuckDB-875"><span class="linenos">875</span></a> <span class="p">)</span>
-</span><span id="DuckDB-876"><a href="#DuckDB-876"><span class="linenos">876</span></a>
-</span><span id="DuckDB-877"><a href="#DuckDB-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">case</span><span class="p">)</span>
-</span><span id="DuckDB-878"><a href="#DuckDB-878"><span class="linenos">878</span></a>
-</span><span id="DuckDB-879"><a href="#DuckDB-879"><span class="linenos">879</span></a> <span class="k">def</span> <span class="nf">objectinsert_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ObjectInsert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB-880"><a href="#DuckDB-880"><span class="linenos">880</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="DuckDB-881"><a href="#DuckDB-881"><span class="linenos">881</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;key&quot;</span><span class="p">)</span>
-</span><span id="DuckDB-882"><a href="#DuckDB-882"><span class="linenos">882</span></a> <span class="n">key_sql</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">key</span><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="DuckDB-883"><a href="#DuckDB-883"><span class="linenos">883</span></a> <span class="n">value_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">)</span>
-</span><span id="DuckDB-884"><a href="#DuckDB-884"><span class="linenos">884</span></a>
-</span><span id="DuckDB-885"><a href="#DuckDB-885"><span class="linenos">885</span></a> <span class="n">kv_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">key_sql</span><span class="si">}</span><span class="s2"> := </span><span class="si">{</span><span class="n">value_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="DuckDB-886"><a href="#DuckDB-886"><span class="linenos">886</span></a>
-</span><span id="DuckDB-887"><a href="#DuckDB-887"><span class="linenos">887</span></a> <span class="c1"># If the input struct is empty e.g. transpiling OBJECT_INSERT(OBJECT_CONSTRUCT(), key, value) from Snowflake</span>
-</span><span id="DuckDB-888"><a href="#DuckDB-888"><span class="linenos">888</span></a> <span class="c1"># then we can generate STRUCT_PACK which will build it since STRUCT_INSERT({}, key := value) is not valid DuckDB</span>
-</span><span id="DuckDB-889"><a href="#DuckDB-889"><span class="linenos">889</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">Struct</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">expressions</span><span class="p">:</span>
-</span><span id="DuckDB-890"><a href="#DuckDB-890"><span class="linenos">890</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_PACK&quot;</span><span class="p">,</span> <span class="n">kv_sql</span><span class="p">)</span>
-</span><span id="DuckDB-891"><a href="#DuckDB-891"><span class="linenos">891</span></a>
-</span><span id="DuckDB-892"><a href="#DuckDB-892"><span class="linenos">892</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_INSERT&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">kv_sql</span><span class="p">)</span>
-</span><span id="DuckDB-893"><a href="#DuckDB-893"><span class="linenos">893</span></a>
-</span><span id="DuckDB-894"><a href="#DuckDB-894"><span class="linenos">894</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="DuckDB-895"><a href="#DuckDB-895"><span class="linenos">895</span></a> <span class="n">explode_array</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;explode_array&quot;</span><span class="p">)</span>
-</span><span id="DuckDB-896"><a href="#DuckDB-896"><span class="linenos">896</span></a> <span class="k">if</span> <span class="n">explode_array</span><span class="p">:</span>
-</span><span id="DuckDB-897"><a href="#DuckDB-897"><span class="linenos">897</span></a> <span class="c1"># In BigQuery, UNNESTing a nested array leads to explosion of the top-level array &amp; struct</span>
-</span><span id="DuckDB-898"><a href="#DuckDB-898"><span class="linenos">898</span></a> <span class="c1"># This is transpiled to DDB by transforming &quot;FROM UNNEST(...)&quot; to &quot;FROM (SELECT UNNEST(..., max_depth =&gt; 2))&quot;</span>
-</span><span id="DuckDB-899"><a href="#DuckDB-899"><span class="linenos">899</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="DuckDB-900"><a href="#DuckDB-900"><span class="linenos">900</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">(</span><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="s2">&quot;max_depth&quot;</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="DuckDB-901"><a href="#DuckDB-901"><span class="linenos">901</span></a> <span class="p">)</span>
-</span><span id="DuckDB-902"><a href="#DuckDB-902"><span class="linenos">902</span></a>
-</span><span id="DuckDB-903"><a href="#DuckDB-903"><span class="linenos">903</span></a> <span class="c1"># If BQ&#39;s UNNEST is aliased, we transform it from a column alias to a table alias in DDB</span>
-</span><span id="DuckDB-904"><a href="#DuckDB-904"><span class="linenos">904</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="DuckDB-905"><a href="#DuckDB-905"><span class="linenos">905</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="DuckDB-906"><a href="#DuckDB-906"><span class="linenos">906</span></a> <span class="n">expression</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="DuckDB-907"><a href="#DuckDB-907"><span class="linenos">907</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">seq_get</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">),</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="DuckDB-908"><a href="#DuckDB-908"><span class="linenos">908</span></a>
-</span><span id="DuckDB-909"><a href="#DuckDB-909"><span class="linenos">909</span></a> <span class="n">unnest_sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB-910"><a href="#DuckDB-910"><span class="linenos">910</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">unnest_sql</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="DuckDB-911"><a href="#DuckDB-911"><span class="linenos">911</span></a> <span 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">select</span><span class="p">)</span>
-</span><span id="DuckDB-912"><a href="#DuckDB-912"><span class="linenos">912</span></a>
-</span><span id="DuckDB-913"><a href="#DuckDB-913"><span class="linenos">913</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB-862"><a href="#DuckDB-862"><span class="linenos">862</span></a> <span class="c1"># We need these casts to make duckdb&#39;s static type checker happy</span>
+</span><span id="DuckDB-863"><a href="#DuckDB-863"><span class="linenos">863</span></a> <span class="n">blob</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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><span id="DuckDB-864"><a href="#DuckDB-864"><span class="linenos">864</span></a> <span class="n">varchar</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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="DuckDB-865"><a href="#DuckDB-865"><span class="linenos">865</span></a>
+</span><span id="DuckDB-866"><a href="#DuckDB-866"><span class="linenos">866</span></a> <span class="n">case</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="DuckDB-867"><a href="#DuckDB-867"><span class="linenos">867</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">case</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;TYPEOF&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">))</span>
+</span><span id="DuckDB-868"><a href="#DuckDB-868"><span class="linenos">868</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span>
+</span><span id="DuckDB-869"><a href="#DuckDB-869"><span class="linenos">869</span></a> <span class="s2">&quot;&#39;VARCHAR&#39;&quot;</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;LENGTH&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">varchar</span><span class="p">])</span>
+</span><span id="DuckDB-870"><a href="#DuckDB-870"><span class="linenos">870</span></a> <span class="p">)</span> <span class="c1"># anonymous to break length_sql recursion</span>
+</span><span id="DuckDB-871"><a href="#DuckDB-871"><span class="linenos">871</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="s2">&quot;&#39;BLOB&#39;&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;OCTET_LENGTH&quot;</span><span class="p">,</span> <span class="n">blob</span><span class="p">))</span>
+</span><span id="DuckDB-872"><a href="#DuckDB-872"><span class="linenos">872</span></a> <span class="p">)</span>
+</span><span id="DuckDB-873"><a href="#DuckDB-873"><span class="linenos">873</span></a>
+</span><span id="DuckDB-874"><a href="#DuckDB-874"><span class="linenos">874</span></a> <span 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="DuckDB-875"><a href="#DuckDB-875"><span class="linenos">875</span></a>
+</span><span id="DuckDB-876"><a href="#DuckDB-876"><span class="linenos">876</span></a> <span class="k">def</span> <span class="nf">objectinsert_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ObjectInsert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB-877"><a href="#DuckDB-877"><span class="linenos">877</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="DuckDB-878"><a href="#DuckDB-878"><span class="linenos">878</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;key&quot;</span><span class="p">)</span>
+</span><span id="DuckDB-879"><a href="#DuckDB-879"><span class="linenos">879</span></a> <span class="n">key_sql</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">key</span><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="DuckDB-880"><a href="#DuckDB-880"><span class="linenos">880</span></a> <span class="n">value_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">)</span>
+</span><span id="DuckDB-881"><a href="#DuckDB-881"><span class="linenos">881</span></a>
+</span><span id="DuckDB-882"><a href="#DuckDB-882"><span class="linenos">882</span></a> <span class="n">kv_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">key_sql</span><span class="si">}</span><span class="s2"> := </span><span class="si">{</span><span class="n">value_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="DuckDB-883"><a href="#DuckDB-883"><span class="linenos">883</span></a>
+</span><span id="DuckDB-884"><a href="#DuckDB-884"><span class="linenos">884</span></a> <span class="c1"># If the input struct is empty e.g. transpiling OBJECT_INSERT(OBJECT_CONSTRUCT(), key, value) from Snowflake</span>
+</span><span id="DuckDB-885"><a href="#DuckDB-885"><span class="linenos">885</span></a> <span class="c1"># then we can generate STRUCT_PACK which will build it since STRUCT_INSERT({}, key := value) is not valid DuckDB</span>
+</span><span id="DuckDB-886"><a href="#DuckDB-886"><span class="linenos">886</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">Struct</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">expressions</span><span class="p">:</span>
+</span><span id="DuckDB-887"><a href="#DuckDB-887"><span class="linenos">887</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_PACK&quot;</span><span class="p">,</span> <span class="n">kv_sql</span><span class="p">)</span>
+</span><span id="DuckDB-888"><a href="#DuckDB-888"><span class="linenos">888</span></a>
+</span><span id="DuckDB-889"><a href="#DuckDB-889"><span class="linenos">889</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_INSERT&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">kv_sql</span><span class="p">)</span>
+</span><span id="DuckDB-890"><a href="#DuckDB-890"><span class="linenos">890</span></a>
+</span><span id="DuckDB-891"><a href="#DuckDB-891"><span class="linenos">891</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="DuckDB-892"><a href="#DuckDB-892"><span class="linenos">892</span></a> <span class="n">explode_array</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;explode_array&quot;</span><span class="p">)</span>
+</span><span id="DuckDB-893"><a href="#DuckDB-893"><span class="linenos">893</span></a> <span class="k">if</span> <span class="n">explode_array</span><span class="p">:</span>
+</span><span id="DuckDB-894"><a href="#DuckDB-894"><span class="linenos">894</span></a> <span class="c1"># In BigQuery, UNNESTing a nested array leads to explosion of the top-level array &amp; struct</span>
+</span><span id="DuckDB-895"><a href="#DuckDB-895"><span class="linenos">895</span></a> <span class="c1"># This is transpiled to DDB by transforming &quot;FROM UNNEST(...)&quot; to &quot;FROM (SELECT UNNEST(..., max_depth =&gt; 2))&quot;</span>
+</span><span id="DuckDB-896"><a href="#DuckDB-896"><span class="linenos">896</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="DuckDB-897"><a href="#DuckDB-897"><span class="linenos">897</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">(</span><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="s2">&quot;max_depth&quot;</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="DuckDB-898"><a href="#DuckDB-898"><span class="linenos">898</span></a> <span class="p">)</span>
+</span><span id="DuckDB-899"><a href="#DuckDB-899"><span class="linenos">899</span></a>
+</span><span id="DuckDB-900"><a href="#DuckDB-900"><span class="linenos">900</span></a> <span class="c1"># If BQ&#39;s UNNEST is aliased, we transform it from a column alias to a table alias in DDB</span>
+</span><span id="DuckDB-901"><a href="#DuckDB-901"><span class="linenos">901</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="DuckDB-902"><a href="#DuckDB-902"><span class="linenos">902</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="DuckDB-903"><a href="#DuckDB-903"><span class="linenos">903</span></a> <span class="n">expression</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="DuckDB-904"><a href="#DuckDB-904"><span class="linenos">904</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">seq_get</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">),</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="DuckDB-905"><a href="#DuckDB-905"><span class="linenos">905</span></a>
+</span><span id="DuckDB-906"><a href="#DuckDB-906"><span class="linenos">906</span></a> <span class="n">unnest_sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB-907"><a href="#DuckDB-907"><span class="linenos">907</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">unnest_sql</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="DuckDB-908"><a href="#DuckDB-908"><span class="linenos">908</span></a> <span 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">select</span><span class="p">)</span>
+</span><span id="DuckDB-909"><a href="#DuckDB-909"><span class="linenos">909</span></a>
+</span><span id="DuckDB-910"><a href="#DuckDB-910"><span class="linenos">910</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -2834,7 +2828,7 @@ Default: 3</li>
<div id="DuckDB.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;STRUCT_PACK&#39;}</span>
+<span class="default_value">{&#39;STRUCT_PACK&#39;, &#39;STRUCT&#39;}</span>
</div>
@@ -2847,7 +2841,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;ADD_MONTHS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AddMonths">sqlglot.expressions.AddMonths</a>&#39;&gt;&gt;, &#39;ANONYMOUS_AGG_FUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnonymousAggFunc">sqlglot.expressions.AnonymousAggFunc</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;APPROX_TOP_K&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxTopK">sqlglot.expressions.ApproxTopK</a>&#39;&gt;&gt;, &#39;ARG_MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;&gt;, &#39;ARGMAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;&gt;, &#39;MAX_BY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;&gt;, &#39;ARG_MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;&gt;, &#39;ARGMIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;&gt;, &#39;MIN_BY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;function Parser.&lt;lambda&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_CONSTRUCT_COMPACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConstructCompact">sqlglot.expressions.ArrayConstructCompact</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;ARRAY_HAS&#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;ARRAY_CONTAINS_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContainsAll">sqlglot.expressions.ArrayContainsAll</a>&#39;&gt;&gt;, &#39;ARRAY_HAS_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContainsAll">sqlglot.expressions.ArrayContainsAll</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_OVERLAPS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_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_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_TO_STRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayToString">sqlglot.expressions.ArrayToString</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayToString">sqlglot.expressions.ArrayToString</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;ARRAY_UNIQUE_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUniqueAgg">sqlglot.expressions.ArrayUniqueAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CBRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cbrt">sqlglot.expressions.Cbrt</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CHR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Chr">sqlglot.expressions.Chr</a>&#39;&gt;&gt;, &#39;CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Chr">sqlglot.expressions.Chr</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;COLLATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Collate">sqlglot.expressions.Collate</a>&#39;&gt;&gt;, &#39;COMBINED_AGG_FUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CombinedAggFunc">sqlglot.expressions.CombinedAggFunc</a>&#39;&gt;&gt;, &#39;COMBINED_PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CombinedParameterizedAgg">sqlglot.expressions.CombinedParameterizedAgg</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CONNECT_BY_ROOT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConnectByRoot">sqlglot.expressions.ConnectByRoot</a>&#39;&gt;&gt;, &#39;CONVERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Convert">sqlglot.expressions.Convert</a>&#39;&gt;&gt;, &#39;CONVERT_TIMEZONE&#39;: &lt;function build_convert_timezone&gt;, &#39;CORR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Corr">sqlglot.expressions.Corr</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;COUNTIF&#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;COVAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CovarPop">sqlglot.expressions.CovarPop</a>&#39;&gt;&gt;, &#39;COVAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CovarSamp">sqlglot.expressions.CovarSamp</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 _build_date_diff&gt;, &#39;DATE_DIFF&#39;: &lt;function _build_date_diff&gt;, &#39;DATE_FROM_PARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_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&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Datetime">sqlglot.expressions.Datetime</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;function <a href="#DuckDB.Parser">DuckDB.Parser</a>.&lt;lambda&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;function <a href="#DuckDB.Parser">DuckDB.Parser</a>.&lt;lambda&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXPLODE_OUTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ExplodeOuter">sqlglot.expressions.ExplodeOuter</a>&#39;&gt;&gt;, &#39;EXPLODING_GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ExplodingGenerateSeries">sqlglot.expressions.ExplodingGenerateSeries</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FIRST_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FirstValue">sqlglot.expressions.FirstValue</a>&#39;&gt;&gt;, &#39;FLATTEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Flatten">sqlglot.expressions.Flatten</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;FROM_ISO8601_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromISO8601Timestamp">sqlglot.expressions.FromISO8601Timestamp</a>&#39;&gt;&gt;, &#39;GAP_FILL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GapFill">sqlglot.expressions.GapFill</a>&#39;&gt;&gt;, &#39;GENERATE_DATE_ARRAY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;function _build_generate_series.&lt;locals&gt;._builder&gt;, &#39;GENERATE_TIMESTAMP_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateTimestampArray">sqlglot.expressions.GenerateTimestampArray</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;function build_hex&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;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;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_INF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsInf">sqlglot.expressions.IsInf</a>&#39;&gt;&gt;, &#39;ISINF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsInf">sqlglot.expressions.IsInf</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;J_S_O_N_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArray">sqlglot.expressions.JSONArray</a>&#39;&gt;&gt;, &#39;J_S_O_N_ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayAgg">sqlglot.expressions.JSONArrayAgg</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;function build_extract_json_with_path.&lt;locals&gt;._builder&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;function build_extract_json_with_path.&lt;locals&gt;._builder&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObjectAgg">sqlglot.expressions.JSONObjectAgg</a>&#39;&gt;&gt;, &#39;J_S_O_N_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONTable">sqlglot.expressions.JSONTable</a>&#39;&gt;&gt;, &#39;LAG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lag">sqlglot.expressions.Lag</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDay">sqlglot.expressions.LastDay</a>&#39;&gt;&gt;, &#39;LAST_DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDay">sqlglot.expressions.LastDay</a>&#39;&gt;&gt;, &#39;LAST_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastValue">sqlglot.expressions.LastValue</a>&#39;&gt;&gt;, &#39;LEAD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lead">sqlglot.expressions.Lead</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LIST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#List">sqlglot.expressions.List</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;function build_logarithm&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;function build_lower&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;LOWER_HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LowerHex">sqlglot.expressions.LowerHex</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;NTH_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NthValue">sqlglot.expressions.NthValue</a>&#39;&gt;&gt;, &#39;NULLIF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nullif">sqlglot.expressions.Nullif</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OBJECT_INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ObjectInsert">sqlglot.expressions.ObjectInsert</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;PAD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pad">sqlglot.expressions.Pad</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PARSE_JSON&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;&gt;, &#39;JSON_PARSE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POSEXPLODE_OUTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PosexplodeOuter">sqlglot.expressions.PosexplodeOuter</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;PREDICT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Predict">sqlglot.expressions.Predict</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;QUARTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quarter">sqlglot.expressions.Quarter</a>&#39;&gt;&gt;, &#39;RAND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;&gt;, &#39;RANDOM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;&gt;, &#39;RANDN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Randn">sqlglot.expressions.Randn</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;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;function <a href="#DuckDB.Parser">DuckDB.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_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;SIGN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sign">sqlglot.expressions.Sign</a>&#39;&gt;&gt;, &#39;SIGNUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sign">sqlglot.expressions.Sign</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;STDEV&#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;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;SPLIT_BY_STRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StringToArray">sqlglot.expressions.StringToArray</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&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Time">sqlglot.expressions.Time</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_FROM_PARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;&gt;, &#39;TIMEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Timestamp">sqlglot.expressions.Timestamp</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMPDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_FROM_PARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>&#39;&gt;&gt;, &#39;TIMESTAMPFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToArray">sqlglot.expressions.ToArray</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TO_DAYS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToDays">sqlglot.expressions.ToDays</a>&#39;&gt;&gt;, &#39;TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToMap">sqlglot.expressions.ToMap</a>&#39;&gt;&gt;, &#39;TO_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToNumber">sqlglot.expressions.ToNumber</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&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Try">sqlglot.expressions.Try</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsDiff">sqlglot.expressions.TsOrDsDiff</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TS_OR_DS_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToTime">sqlglot.expressions.TsOrDsToTime</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToTimestamp">sqlglot.expressions.TsOrDsToTimestamp</a>&#39;&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixDate">sqlglot.expressions.UnixDate</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;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;UPPER&#39;: &lt;function build_upper&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 build_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;JSON_EXTRACT_PATH_TEXT&#39;: &lt;function build_extract_json_with_path.&lt;locals&gt;._builder&gt;, &#39;LIKE&#39;: &lt;function build_like&gt;, &#39;LOG2&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LOG10&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LPAD&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LEFTPAD&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;MOD&#39;: &lt;function build_mod&gt;, &#39;RPAD&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;RIGHTPAD&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SCOPE_RESOLUTION&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TO_HEX&#39;: &lt;function build_hex&gt;, &#39;ARRAY_REVERSE_SORT&#39;: &lt;function _build_sort_array_desc&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;JSON&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_PATH&#39;: &lt;function build_extract_json_with_path.&lt;locals&gt;._builder&gt;, &#39;JSON_EXTRACT_STRING&#39;: &lt;function build_extract_json_with_path.&lt;locals&gt;._builder&gt;, &#39;LIST_HAS&#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;LIST_REVERSE_SORT&#39;: &lt;function _build_sort_array_desc&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;function <a href="#DuckDB.Parser">DuckDB.Parser</a>.&lt;lambda&gt;&gt;, &#39;MAKE_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;&gt;, &#39;MAKE_TIMESTAMP&#39;: &lt;function _build_make_timestamp&gt;, &#39;MEDIAN&#39;: &lt;function <a href="#DuckDB.Parser">DuckDB.Parser</a>.&lt;lambda&gt;&gt;, &#39;QUANTILE_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;QUANTILE_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;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 build_formatted_time.&lt;locals&gt;._builder&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;STRPTIME&#39;: &lt;function build_formatted_time.&lt;locals&gt;._builder&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;RANGE&#39;: &lt;function _build_generate_series.&lt;locals&gt;._builder&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;ADD_MONTHS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AddMonths">sqlglot.expressions.AddMonths</a>&#39;&gt;&gt;, &#39;ANONYMOUS_AGG_FUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnonymousAggFunc">sqlglot.expressions.AnonymousAggFunc</a>&#39;&gt;&gt;, &#39;ANY_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>&#39;&gt;&gt;, &#39;APPROX_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_COUNT_DISTINCT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>&#39;&gt;&gt;, &#39;APPROX_QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>&#39;&gt;&gt;, &#39;APPROX_TOP_K&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ApproxTopK">sqlglot.expressions.ApproxTopK</a>&#39;&gt;&gt;, &#39;ARG_MAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;&gt;, &#39;ARGMAX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;&gt;, &#39;MAX_BY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>&#39;&gt;&gt;, &#39;ARG_MIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;&gt;, &#39;ARGMIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;&gt;, &#39;MIN_BY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>&#39;&gt;&gt;, &#39;ARRAY&#39;: &lt;function Parser.&lt;lambda&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_CONSTRUCT_COMPACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayConstructCompact">sqlglot.expressions.ArrayConstructCompact</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;ARRAY_HAS&#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;ARRAY_CONTAINS_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContainsAll">sqlglot.expressions.ArrayContainsAll</a>&#39;&gt;&gt;, &#39;ARRAY_HAS_ALL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayContainsAll">sqlglot.expressions.ArrayContainsAll</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_OVERLAPS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>&#39;&gt;&gt;, &#39;ARRAY_SIZE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>&#39;&gt;&gt;, &#39;ARRAY_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_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_TO_STRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayToString">sqlglot.expressions.ArrayToString</a>&#39;&gt;&gt;, &#39;ARRAY_JOIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayToString">sqlglot.expressions.ArrayToString</a>&#39;&gt;&gt;, &#39;ARRAY_UNION_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>&#39;&gt;&gt;, &#39;ARRAY_UNIQUE_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ArrayUniqueAgg">sqlglot.expressions.ArrayUniqueAgg</a>&#39;&gt;&gt;, &#39;AVG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>&#39;&gt;&gt;, &#39;CASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Case">sqlglot.expressions.Case</a>&#39;&gt;&gt;, &#39;CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>&#39;&gt;&gt;, &#39;CAST_TO_STR_TYPE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>&#39;&gt;&gt;, &#39;CBRT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Cbrt">sqlglot.expressions.Cbrt</a>&#39;&gt;&gt;, &#39;CEIL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CEILING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>&#39;&gt;&gt;, &#39;CHR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Chr">sqlglot.expressions.Chr</a>&#39;&gt;&gt;, &#39;CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Chr">sqlglot.expressions.Chr</a>&#39;&gt;&gt;, &#39;COALESCE&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;IFNULL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;NVL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>&#39;&gt;&gt;, &#39;COLLATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Collate">sqlglot.expressions.Collate</a>&#39;&gt;&gt;, &#39;COMBINED_AGG_FUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CombinedAggFunc">sqlglot.expressions.CombinedAggFunc</a>&#39;&gt;&gt;, &#39;COMBINED_PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CombinedParameterizedAgg">sqlglot.expressions.CombinedParameterizedAgg</a>&#39;&gt;&gt;, &#39;CONCAT&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CONCAT_WS&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;CONNECT_BY_ROOT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ConnectByRoot">sqlglot.expressions.ConnectByRoot</a>&#39;&gt;&gt;, &#39;CONVERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Convert">sqlglot.expressions.Convert</a>&#39;&gt;&gt;, &#39;CONVERT_TIMEZONE&#39;: &lt;function build_convert_timezone&gt;, &#39;CORR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Corr">sqlglot.expressions.Corr</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;COUNTIF&#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;COVAR_POP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CovarPop">sqlglot.expressions.CovarPop</a>&#39;&gt;&gt;, &#39;COVAR_SAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#CovarSamp">sqlglot.expressions.CovarSamp</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 _build_date_diff&gt;, &#39;DATE_DIFF&#39;: &lt;function _build_date_diff&gt;, &#39;DATE_FROM_PARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>&#39;&gt;&gt;, &#39;DATE_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>&#39;&gt;&gt;, &#39;DATE_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&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Datetime">sqlglot.expressions.Datetime</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;function <a href="#DuckDB.Parser">DuckDB.Parser</a>.&lt;lambda&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;function <a href="#DuckDB.Parser">DuckDB.Parser</a>.&lt;lambda&gt;&gt;, &#39;EXP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>&#39;&gt;&gt;, &#39;EXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>&#39;&gt;&gt;, &#39;EXPLODE_OUTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ExplodeOuter">sqlglot.expressions.ExplodeOuter</a>&#39;&gt;&gt;, &#39;EXPLODING_GENERATE_SERIES&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ExplodingGenerateSeries">sqlglot.expressions.ExplodingGenerateSeries</a>&#39;&gt;&gt;, &#39;EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>&#39;&gt;&gt;, &#39;FIRST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#First">sqlglot.expressions.First</a>&#39;&gt;&gt;, &#39;FIRST_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FirstValue">sqlglot.expressions.FirstValue</a>&#39;&gt;&gt;, &#39;FLATTEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Flatten">sqlglot.expressions.Flatten</a>&#39;&gt;&gt;, &#39;FLOOR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>&#39;&gt;&gt;, &#39;FROM_BASE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>&#39;&gt;&gt;, &#39;FROM_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>&#39;&gt;&gt;, &#39;FROM_ISO8601_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#FromISO8601Timestamp">sqlglot.expressions.FromISO8601Timestamp</a>&#39;&gt;&gt;, &#39;GAP_FILL&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GapFill">sqlglot.expressions.GapFill</a>&#39;&gt;&gt;, &#39;GENERATE_DATE_ARRAY&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;GENERATE_SERIES&#39;: &lt;function _build_generate_series.&lt;locals&gt;._builder&gt;, &#39;GENERATE_TIMESTAMP_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#GenerateTimestampArray">sqlglot.expressions.GenerateTimestampArray</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;function build_hex&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;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;INITCAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>&#39;&gt;&gt;, &#39;IS_INF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsInf">sqlglot.expressions.IsInf</a>&#39;&gt;&gt;, &#39;ISINF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsInf">sqlglot.expressions.IsInf</a>&#39;&gt;&gt;, &#39;IS_NAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;ISNAN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>&#39;&gt;&gt;, &#39;J_S_O_N_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArray">sqlglot.expressions.JSONArray</a>&#39;&gt;&gt;, &#39;J_S_O_N_ARRAY_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayAgg">sqlglot.expressions.JSONArrayAgg</a>&#39;&gt;&gt;, &#39;JSON_ARRAY_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>&#39;&gt;&gt;, &#39;JSONB_CONTAINS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>&#39;&gt;&gt;, &#39;JSONB_EXTRACT_SCALAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT&#39;: &lt;function build_extract_json_with_path.&lt;locals&gt;._builder&gt;, &#39;JSON_EXTRACT_SCALAR&#39;: &lt;function build_extract_json_with_path.&lt;locals&gt;._builder&gt;, &#39;JSON_FORMAT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>&#39;&gt;&gt;, &#39;J_S_O_N_OBJECT_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONObjectAgg">sqlglot.expressions.JSONObjectAgg</a>&#39;&gt;&gt;, &#39;J_S_O_N_TABLE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#JSONTable">sqlglot.expressions.JSONTable</a>&#39;&gt;&gt;, &#39;LAG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lag">sqlglot.expressions.Lag</a>&#39;&gt;&gt;, &#39;LAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Last">sqlglot.expressions.Last</a>&#39;&gt;&gt;, &#39;LAST_DAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDay">sqlglot.expressions.LastDay</a>&#39;&gt;&gt;, &#39;LAST_DAY_OF_MONTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastDay">sqlglot.expressions.LastDay</a>&#39;&gt;&gt;, &#39;LAST_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LastValue">sqlglot.expressions.LastValue</a>&#39;&gt;&gt;, &#39;LEAD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Lead">sqlglot.expressions.Lead</a>&#39;&gt;&gt;, &#39;LEAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Least">sqlglot.expressions.Least</a>&#39;&gt;&gt;, &#39;LEFT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Left">sqlglot.expressions.Left</a>&#39;&gt;&gt;, &#39;LENGTH&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Length">sqlglot.expressions.Length</a>&#39;&gt;&gt;, &#39;LEVENSHTEIN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>&#39;&gt;&gt;, &#39;LIST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#List">sqlglot.expressions.List</a>&#39;&gt;&gt;, &#39;LN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>&#39;&gt;&gt;, &#39;LOG&#39;: &lt;function build_logarithm&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;function build_lower&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;LOWER_HEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#LowerHex">sqlglot.expressions.LowerHex</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;NTH_VALUE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NthValue">sqlglot.expressions.NthValue</a>&#39;&gt;&gt;, &#39;NULLIF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nullif">sqlglot.expressions.Nullif</a>&#39;&gt;&gt;, &#39;NUMBER_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>&#39;&gt;&gt;, &#39;NVL2&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>&#39;&gt;&gt;, &#39;OBJECT_INSERT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ObjectInsert">sqlglot.expressions.ObjectInsert</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;PAD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pad">sqlglot.expressions.Pad</a>&#39;&gt;&gt;, &#39;PARAMETERIZED_AGG&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>&#39;&gt;&gt;, &#39;PARSE_JSON&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;&gt;, &#39;JSON_PARSE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;&gt;, &#39;PERCENTILE_CONT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>&#39;&gt;&gt;, &#39;PERCENTILE_DISC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>&#39;&gt;&gt;, &#39;POSEXPLODE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>&#39;&gt;&gt;, &#39;POSEXPLODE_OUTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#PosexplodeOuter">sqlglot.expressions.PosexplodeOuter</a>&#39;&gt;&gt;, &#39;POWER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;POW&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>&#39;&gt;&gt;, &#39;PREDICT&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Predict">sqlglot.expressions.Predict</a>&#39;&gt;&gt;, &#39;QUANTILE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>&#39;&gt;&gt;, &#39;QUARTER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Quarter">sqlglot.expressions.Quarter</a>&#39;&gt;&gt;, &#39;RAND&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;&gt;, &#39;RANDOM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>&#39;&gt;&gt;, &#39;RANDN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Randn">sqlglot.expressions.Randn</a>&#39;&gt;&gt;, &#39;RANGE_N&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>&#39;&gt;&gt;, &#39;READ_CSV&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>&#39;&gt;&gt;, &#39;REDUCE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>&#39;&gt;&gt;, &#39;REGEXP_EXTRACT&#39;: &lt;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;function <a href="#DuckDB.Parser">DuckDB.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_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;SIGN&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sign">sqlglot.expressions.Sign</a>&#39;&gt;&gt;, &#39;SIGNUM&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Sign">sqlglot.expressions.Sign</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;STDEV&#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;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;SPLIT_BY_STRING&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#StringToArray">sqlglot.expressions.StringToArray</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&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Time">sqlglot.expressions.Time</a>&#39;&gt;&gt;, &#39;TIME_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>&#39;&gt;&gt;, &#39;TIME_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>&#39;&gt;&gt;, &#39;TIME_FROM_PARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;&gt;, &#39;TIMEFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>&#39;&gt;&gt;, &#39;TIME_STR_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>&#39;&gt;&gt;, &#39;TIME_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>&#39;&gt;&gt;, &#39;TIME_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>&#39;&gt;&gt;, &#39;TIME_TO_TIME_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TIME_TO_UNIX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>&#39;&gt;&gt;, &#39;TIME_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>&#39;&gt;&gt;, &#39;TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Timestamp">sqlglot.expressions.Timestamp</a>&#39;&gt;&gt;, &#39;TIMESTAMP_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>&#39;&gt;&gt;, &#39;TIMESTAMPDIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>&#39;&gt;&gt;, &#39;TIMESTAMP_FROM_PARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>&#39;&gt;&gt;, &#39;TIMESTAMPFROMPARTS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>&#39;&gt;&gt;, &#39;TIMESTAMP_SUB&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>&#39;&gt;&gt;, &#39;TIMESTAMP_TRUNC&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>&#39;&gt;&gt;, &#39;TO_ARRAY&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToArray">sqlglot.expressions.ToArray</a>&#39;&gt;&gt;, &#39;TO_BASE64&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>&#39;&gt;&gt;, &#39;TO_CHAR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>&#39;&gt;&gt;, &#39;TO_DAYS&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToDays">sqlglot.expressions.ToDays</a>&#39;&gt;&gt;, &#39;TO_MAP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToMap">sqlglot.expressions.ToMap</a>&#39;&gt;&gt;, &#39;TO_NUMBER&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ToNumber">sqlglot.expressions.ToNumber</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&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Try">sqlglot.expressions.Try</a>&#39;&gt;&gt;, &#39;TRY_CAST&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>&#39;&gt;&gt;, &#39;TS_OR_DI_TO_DI&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>&#39;&gt;&gt;, &#39;TS_OR_DS_ADD&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>&#39;&gt;&gt;, &#39;TS_OR_DS_DIFF&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsDiff">sqlglot.expressions.TsOrDsDiff</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_DATE_STR&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TS_OR_DS_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToTime">sqlglot.expressions.TsOrDsToTime</a>&#39;&gt;&gt;, &#39;TS_OR_DS_TO_TIMESTAMP&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TsOrDsToTimestamp">sqlglot.expressions.TsOrDsToTimestamp</a>&#39;&gt;&gt;, &#39;UNHEX&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>&#39;&gt;&gt;, &#39;UNIX_DATE&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixDate">sqlglot.expressions.UnixDate</a>&#39;&gt;&gt;, &#39;UNIX_TO_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>&#39;&gt;&gt;, &#39;UNIX_TO_TIME_STR&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>&#39;&gt;&gt;, &#39;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;UPPER&#39;: &lt;function build_upper&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 build_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;JSON_EXTRACT_PATH_TEXT&#39;: &lt;function build_extract_json_with_path.&lt;locals&gt;._builder&gt;, &#39;LIKE&#39;: &lt;function build_like&gt;, &#39;LOG2&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LOG10&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LPAD&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LEFTPAD&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;LTRIM&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;MOD&#39;: &lt;function build_mod&gt;, &#39;RIGHTPAD&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;RPAD&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;RTRIM&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;SCOPE_RESOLUTION&#39;: &lt;function Parser.&lt;lambda&gt;&gt;, &#39;TO_HEX&#39;: &lt;function build_hex&gt;, &#39;ARRAY_REVERSE_SORT&#39;: &lt;function _build_sort_array_desc&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;JSON&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>&#39;&gt;&gt;, &#39;JSON_EXTRACT_PATH&#39;: &lt;function build_extract_json_with_path.&lt;locals&gt;._builder&gt;, &#39;JSON_EXTRACT_STRING&#39;: &lt;function build_extract_json_with_path.&lt;locals&gt;._builder&gt;, &#39;LIST_HAS&#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;LIST_REVERSE_SORT&#39;: &lt;function _build_sort_array_desc&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;function <a href="#DuckDB.Parser">DuckDB.Parser</a>.&lt;lambda&gt;&gt;, &#39;MAKE_TIME&#39;: &lt;bound method Func.from_arg_list of &lt;class &#39;<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>&#39;&gt;&gt;, &#39;MAKE_TIMESTAMP&#39;: &lt;function _build_make_timestamp&gt;, &#39;MEDIAN&#39;: &lt;function <a href="#DuckDB.Parser">DuckDB.Parser</a>.&lt;lambda&gt;&gt;, &#39;QUANTILE_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;QUANTILE_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;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 build_formatted_time.&lt;locals&gt;._builder&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;STRPTIME&#39;: &lt;function build_formatted_time.&lt;locals&gt;._builder&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;RANGE&#39;: &lt;function _build_generate_series.&lt;locals&gt;._builder&gt;}</span>
</div>
@@ -2886,7 +2880,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="DuckDB.Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DuckDB.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.STORAGE_INTEGRATION: &#39;STORAGE_INTEGRATION&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.RENAME: &#39;RENAME&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.NAME: &#39;NAME&#39;&gt;, &lt;TokenType.VECTOR: &#39;VECTOR&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TRUNCATE: &#39;TRUNCATE&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.TDIGEST: &#39;TDIGEST&#39;&gt;, &lt;TokenType.COPY: &#39;COPY&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.WAREHOUSE: &#39;WAREHOUSE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.TAG: &#39;TAG&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.STRAIGHT_JOIN: &#39;STRAIGHT_JOIN&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.SEQUENCE: &#39;SEQUENCE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.LIST: &#39;LIST&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.TIMESTAMPNTZ: &#39;TIMESTAMPNTZ&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.STREAMLIT: &#39;STREAMLIT&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DuckDB.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.STORAGE_INTEGRATION: &#39;STORAGE_INTEGRATION&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.STRAIGHT_JOIN: &#39;STRAIGHT_JOIN&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.LIST: &#39;LIST&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COPY: &#39;COPY&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.TAG: &#39;TAG&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPNTZ: &#39;TIMESTAMPNTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.TDIGEST: &#39;TDIGEST&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STREAMLIT: &#39;STREAMLIT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.VECTOR: &#39;VECTOR&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.NAME: &#39;NAME&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.WAREHOUSE: &#39;WAREHOUSE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.TRUNCATE: &#39;TRUNCATE&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.SEQUENCE: &#39;SEQUENCE&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.RENAME: &#39;RENAME&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;}</span>
</div>
@@ -2925,7 +2919,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">ID_VAR_TOKENS</span> =
<input id="DuckDB.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="DuckDB.Parser.ID_VAR_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.STORAGE_INTEGRATION: &#39;STORAGE_INTEGRATION&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.RENAME: &#39;RENAME&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.NAME: &#39;NAME&#39;&gt;, &lt;TokenType.VECTOR: &#39;VECTOR&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TRUNCATE: &#39;TRUNCATE&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.TDIGEST: &#39;TDIGEST&#39;&gt;, &lt;TokenType.COPY: &#39;COPY&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.WAREHOUSE: &#39;WAREHOUSE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.TAG: &#39;TAG&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.STRAIGHT_JOIN: &#39;STRAIGHT_JOIN&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.SEQUENCE: &#39;SEQUENCE&#39;&gt;, &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.LIST: &#39;LIST&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.TIMESTAMPNTZ: &#39;TIMESTAMPNTZ&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.STREAMLIT: &#39;STREAMLIT&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DuckDB.Parser.ID_VAR_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ASOF: &#39;ASOF&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.STORAGE_INTEGRATION: &#39;STORAGE_INTEGRATION&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.STRAIGHT_JOIN: &#39;STRAIGHT_JOIN&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.LIST: &#39;LIST&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COPY: &#39;COPY&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.TAG: &#39;TAG&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPNTZ: &#39;TIMESTAMPNTZ&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.TDIGEST: &#39;TDIGEST&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STREAMLIT: &#39;STREAMLIT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.VECTOR: &#39;VECTOR&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.NAME: &#39;NAME&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.ROLLUP: &#39;ROLLUP&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.WAREHOUSE: &#39;WAREHOUSE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CUBE: &#39;CUBE&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.SEQUENCE: &#39;SEQUENCE&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.TRUNCATE: &#39;TRUNCATE&#39;&gt;, &lt;TokenType.RENAME: &#39;RENAME&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;}</span>
</div>
@@ -3407,163 +3401,160 @@ Default: 3</li>
</span><span id="DuckDB.Generator-754"><a href="#DuckDB.Generator-754"><span class="linenos">754</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
</span><span id="DuckDB.Generator-755"><a href="#DuckDB.Generator-755"><span class="linenos">755</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="DuckDB.Generator-756"><a href="#DuckDB.Generator-756"><span class="linenos">756</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-757"><a href="#DuckDB.Generator-757"><span class="linenos">757</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-758"><a href="#DuckDB.Generator-758"><span class="linenos">758</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DuckDB.Generator-759"><a href="#DuckDB.Generator-759"><span class="linenos">759</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-760"><a href="#DuckDB.Generator-760"><span class="linenos">760</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
-</span><span id="DuckDB.Generator-761"><a href="#DuckDB.Generator-761"><span class="linenos">761</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
-</span><span id="DuckDB.Generator-762"><a href="#DuckDB.Generator-762"><span class="linenos">762</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
-</span><span id="DuckDB.Generator-763"><a href="#DuckDB.Generator-763"><span class="linenos">763</span></a>
-</span><span id="DuckDB.Generator-764"><a href="#DuckDB.Generator-764"><span class="linenos">764</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;size&quot;</span><span class="p">):</span>
-</span><span id="DuckDB.Generator-765"><a href="#DuckDB.Generator-765"><span class="linenos">765</span></a> <span class="n">method</span> <span class="o">=</span> <span class="n">expression</span><span class="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="DuckDB.Generator-766"><a href="#DuckDB.Generator-766"><span class="linenos">766</span></a> <span class="k">if</span> <span class="n">method</span> <span class="ow">and</span> <span class="n">method</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;RESERVOIR&quot;</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-767"><a href="#DuckDB.Generator-767"><span class="linenos">767</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
-</span><span id="DuckDB.Generator-768"><a href="#DuckDB.Generator-768"><span class="linenos">768</span></a> <span class="sa">f</span><span class="s2">&quot;Sampling method </span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2"> is not supported with a discrete sample count, &quot;</span>
-</span><span id="DuckDB.Generator-769"><a href="#DuckDB.Generator-769"><span class="linenos">769</span></a> <span class="s2">&quot;defaulting to reservoir sampling&quot;</span>
-</span><span id="DuckDB.Generator-770"><a href="#DuckDB.Generator-770"><span class="linenos">770</span></a> <span class="p">)</span>
-</span><span id="DuckDB.Generator-771"><a href="#DuckDB.Generator-771"><span class="linenos">771</span></a> <span class="n">expression</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">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;RESERVOIR&quot;</span><span class="p">))</span>
-</span><span id="DuckDB.Generator-772"><a href="#DuckDB.Generator-772"><span class="linenos">772</span></a>
-</span><span id="DuckDB.Generator-773"><a href="#DuckDB.Generator-773"><span class="linenos">773</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tablesample_sql</span><span class="p">(</span>
-</span><span id="DuckDB.Generator-774"><a href="#DuckDB.Generator-774"><span class="linenos">774</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span>
-</span><span id="DuckDB.Generator-775"><a href="#DuckDB.Generator-775"><span class="linenos">775</span></a> <span class="p">)</span>
-</span><span id="DuckDB.Generator-776"><a href="#DuckDB.Generator-776"><span class="linenos">776</span></a>
-</span><span id="DuckDB.Generator-777"><a href="#DuckDB.Generator-777"><span class="linenos">777</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-778"><a href="#DuckDB.Generator-778"><span class="linenos">778</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-779"><a href="#DuckDB.Generator-779"><span class="linenos">779</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-780"><a href="#DuckDB.Generator-780"><span class="linenos">780</span></a>
-</span><span id="DuckDB.Generator-781"><a href="#DuckDB.Generator-781"><span class="linenos">781</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-782"><a href="#DuckDB.Generator-782"><span class="linenos">782</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
-</span><span id="DuckDB.Generator-783"><a href="#DuckDB.Generator-783"><span class="linenos">783</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-784"><a href="#DuckDB.Generator-784"><span class="linenos">784</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
+</span><span id="DuckDB.Generator-757"><a href="#DuckDB.Generator-757"><span class="linenos">757</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DuckDB.Generator-758"><a href="#DuckDB.Generator-758"><span class="linenos">758</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-759"><a href="#DuckDB.Generator-759"><span class="linenos">759</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
+</span><span id="DuckDB.Generator-760"><a href="#DuckDB.Generator-760"><span class="linenos">760</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
+</span><span id="DuckDB.Generator-761"><a href="#DuckDB.Generator-761"><span class="linenos">761</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
+</span><span id="DuckDB.Generator-762"><a href="#DuckDB.Generator-762"><span class="linenos">762</span></a>
+</span><span id="DuckDB.Generator-763"><a href="#DuckDB.Generator-763"><span class="linenos">763</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;size&quot;</span><span class="p">):</span>
+</span><span id="DuckDB.Generator-764"><a href="#DuckDB.Generator-764"><span class="linenos">764</span></a> <span class="n">method</span> <span class="o">=</span> <span class="n">expression</span><span class="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="DuckDB.Generator-765"><a href="#DuckDB.Generator-765"><span class="linenos">765</span></a> <span class="k">if</span> <span class="n">method</span> <span class="ow">and</span> <span class="n">method</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;RESERVOIR&quot;</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-766"><a href="#DuckDB.Generator-766"><span class="linenos">766</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
+</span><span id="DuckDB.Generator-767"><a href="#DuckDB.Generator-767"><span class="linenos">767</span></a> <span class="sa">f</span><span class="s2">&quot;Sampling method </span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2"> is not supported with a discrete sample count, &quot;</span>
+</span><span id="DuckDB.Generator-768"><a href="#DuckDB.Generator-768"><span class="linenos">768</span></a> <span class="s2">&quot;defaulting to reservoir sampling&quot;</span>
+</span><span id="DuckDB.Generator-769"><a href="#DuckDB.Generator-769"><span class="linenos">769</span></a> <span class="p">)</span>
+</span><span id="DuckDB.Generator-770"><a href="#DuckDB.Generator-770"><span class="linenos">770</span></a> <span class="n">expression</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">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;RESERVOIR&quot;</span><span class="p">))</span>
+</span><span id="DuckDB.Generator-771"><a href="#DuckDB.Generator-771"><span class="linenos">771</span></a>
+</span><span id="DuckDB.Generator-772"><a href="#DuckDB.Generator-772"><span class="linenos">772</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">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-773"><a href="#DuckDB.Generator-773"><span class="linenos">773</span></a>
+</span><span id="DuckDB.Generator-774"><a href="#DuckDB.Generator-774"><span class="linenos">774</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-775"><a href="#DuckDB.Generator-775"><span class="linenos">775</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-776"><a href="#DuckDB.Generator-776"><span class="linenos">776</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-777"><a href="#DuckDB.Generator-777"><span class="linenos">777</span></a>
+</span><span id="DuckDB.Generator-778"><a href="#DuckDB.Generator-778"><span class="linenos">778</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-779"><a href="#DuckDB.Generator-779"><span class="linenos">779</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
+</span><span id="DuckDB.Generator-780"><a href="#DuckDB.Generator-780"><span class="linenos">780</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-781"><a href="#DuckDB.Generator-781"><span class="linenos">781</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
+</span><span id="DuckDB.Generator-782"><a href="#DuckDB.Generator-782"><span class="linenos">782</span></a>
+</span><span id="DuckDB.Generator-783"><a href="#DuckDB.Generator-783"><span class="linenos">783</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-784"><a href="#DuckDB.Generator-784"><span class="linenos">784</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="DuckDB.Generator-785"><a href="#DuckDB.Generator-785"><span class="linenos">785</span></a>
-</span><span id="DuckDB.Generator-786"><a href="#DuckDB.Generator-786"><span class="linenos">786</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-787"><a href="#DuckDB.Generator-787"><span class="linenos">787</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="DuckDB.Generator-788"><a href="#DuckDB.Generator-788"><span class="linenos">788</span></a>
-</span><span id="DuckDB.Generator-789"><a href="#DuckDB.Generator-789"><span class="linenos">789</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-790"><a href="#DuckDB.Generator-790"><span class="linenos">790</span></a>
-</span><span id="DuckDB.Generator-791"><a href="#DuckDB.Generator-791"><span class="linenos">791</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-792"><a href="#DuckDB.Generator-792"><span class="linenos">792</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">):</span>
-</span><span id="DuckDB.Generator-793"><a href="#DuckDB.Generator-793"><span class="linenos">793</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-794"><a href="#DuckDB.Generator-794"><span class="linenos">794</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-795"><a href="#DuckDB.Generator-795"><span class="linenos">795</span></a>
-</span><span id="DuckDB.Generator-796"><a href="#DuckDB.Generator-796"><span class="linenos">796</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="DuckDB.Generator-797"><a href="#DuckDB.Generator-797"><span class="linenos">797</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="DuckDB.Generator-798"><a href="#DuckDB.Generator-798"><span class="linenos">798</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span> <span class="o">==</span> <span class="s2">&quot;LEFT&quot;</span>
-</span><span id="DuckDB.Generator-799"><a href="#DuckDB.Generator-799"><span class="linenos">799</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-800"><a href="#DuckDB.Generator-800"><span class="linenos">800</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="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-801"><a href="#DuckDB.Generator-801"><span class="linenos">801</span></a> <span class="p">):</span>
-</span><span id="DuckDB.Generator-802"><a href="#DuckDB.Generator-802"><span class="linenos">802</span></a> <span class="c1"># Some dialects support `LEFT JOIN UNNEST(...)` without an explicit ON clause</span>
-</span><span id="DuckDB.Generator-803"><a href="#DuckDB.Generator-803"><span class="linenos">803</span></a> <span class="c1"># DuckDB doesn&#39;t, but we can just add a dummy ON clause that is always true</span>
-</span><span id="DuckDB.Generator-804"><a href="#DuckDB.Generator-804"><span class="linenos">804</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()))</span>
-</span><span id="DuckDB.Generator-805"><a href="#DuckDB.Generator-805"><span class="linenos">805</span></a>
-</span><span id="DuckDB.Generator-806"><a href="#DuckDB.Generator-806"><span class="linenos">806</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-807"><a href="#DuckDB.Generator-807"><span class="linenos">807</span></a>
-</span><span id="DuckDB.Generator-808"><a href="#DuckDB.Generator-808"><span class="linenos">808</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="DuckDB.Generator-809"><a href="#DuckDB.Generator-809"><span class="linenos">809</span></a> <span class="c1"># GENERATE_SERIES(a, b) -&gt; [a, b], RANGE(a, b) -&gt; [a, b)</span>
-</span><span id="DuckDB.Generator-810"><a href="#DuckDB.Generator-810"><span class="linenos">810</span></a> <span class="k">if</span> <span class="n">expression</span><span class="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_end_exclusive&quot;</span><span class="p">):</span>
-</span><span id="DuckDB.Generator-811"><a href="#DuckDB.Generator-811"><span class="linenos">811</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANGE&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-812"><a href="#DuckDB.Generator-812"><span class="linenos">812</span></a>
-</span><span id="DuckDB.Generator-813"><a href="#DuckDB.Generator-813"><span class="linenos">813</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="DuckDB.Generator-814"><a href="#DuckDB.Generator-814"><span class="linenos">814</span></a>
-</span><span id="DuckDB.Generator-815"><a href="#DuckDB.Generator-815"><span class="linenos">815</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="DuckDB.Generator-816"><a href="#DuckDB.Generator-816"><span class="linenos">816</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="DuckDB.Generator-817"><a href="#DuckDB.Generator-817"><span class="linenos">817</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">Array</span><span class="p">):</span>
-</span><span id="DuckDB.Generator-818"><a href="#DuckDB.Generator-818"><span class="linenos">818</span></a> <span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
-</span><span id="DuckDB.Generator-819"><a href="#DuckDB.Generator-819"><span class="linenos">819</span></a>
-</span><span id="DuckDB.Generator-820"><a href="#DuckDB.Generator-820"><span class="linenos">820</span></a> <span class="n">bracket</span> <span class="o">=</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="DuckDB.Generator-821"><a href="#DuckDB.Generator-821"><span class="linenos">821</span></a>
-</span><span id="DuckDB.Generator-822"><a href="#DuckDB.Generator-822"><span class="linenos">822</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;returns_list_for_maps&quot;</span><span class="p">):</span>
-</span><span id="DuckDB.Generator-823"><a href="#DuckDB.Generator-823"><span class="linenos">823</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="DuckDB.Generator-824"><a href="#DuckDB.Generator-824"><span class="linenos">824</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="DuckDB.Generator-825"><a href="#DuckDB.Generator-825"><span class="linenos">825</span></a>
-</span><span id="DuckDB.Generator-826"><a href="#DuckDB.Generator-826"><span class="linenos">826</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-786"><a href="#DuckDB.Generator-786"><span class="linenos">786</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-787"><a href="#DuckDB.Generator-787"><span class="linenos">787</span></a>
+</span><span id="DuckDB.Generator-788"><a href="#DuckDB.Generator-788"><span class="linenos">788</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-789"><a href="#DuckDB.Generator-789"><span class="linenos">789</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">):</span>
+</span><span id="DuckDB.Generator-790"><a href="#DuckDB.Generator-790"><span class="linenos">790</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-791"><a href="#DuckDB.Generator-791"><span class="linenos">791</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-792"><a href="#DuckDB.Generator-792"><span class="linenos">792</span></a>
+</span><span id="DuckDB.Generator-793"><a href="#DuckDB.Generator-793"><span class="linenos">793</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="DuckDB.Generator-794"><a href="#DuckDB.Generator-794"><span class="linenos">794</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="DuckDB.Generator-795"><a href="#DuckDB.Generator-795"><span class="linenos">795</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span> <span class="o">==</span> <span class="s2">&quot;LEFT&quot;</span>
+</span><span id="DuckDB.Generator-796"><a href="#DuckDB.Generator-796"><span class="linenos">796</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-797"><a href="#DuckDB.Generator-797"><span class="linenos">797</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="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-798"><a href="#DuckDB.Generator-798"><span class="linenos">798</span></a> <span class="p">):</span>
+</span><span id="DuckDB.Generator-799"><a href="#DuckDB.Generator-799"><span class="linenos">799</span></a> <span class="c1"># Some dialects support `LEFT JOIN UNNEST(...)` without an explicit ON clause</span>
+</span><span id="DuckDB.Generator-800"><a href="#DuckDB.Generator-800"><span class="linenos">800</span></a> <span class="c1"># DuckDB doesn&#39;t, but we can just add a dummy ON clause that is always true</span>
+</span><span id="DuckDB.Generator-801"><a href="#DuckDB.Generator-801"><span class="linenos">801</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()))</span>
+</span><span id="DuckDB.Generator-802"><a href="#DuckDB.Generator-802"><span class="linenos">802</span></a>
+</span><span id="DuckDB.Generator-803"><a href="#DuckDB.Generator-803"><span class="linenos">803</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-804"><a href="#DuckDB.Generator-804"><span class="linenos">804</span></a>
+</span><span id="DuckDB.Generator-805"><a href="#DuckDB.Generator-805"><span class="linenos">805</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="DuckDB.Generator-806"><a href="#DuckDB.Generator-806"><span class="linenos">806</span></a> <span class="c1"># GENERATE_SERIES(a, b) -&gt; [a, b], RANGE(a, b) -&gt; [a, b)</span>
+</span><span id="DuckDB.Generator-807"><a href="#DuckDB.Generator-807"><span class="linenos">807</span></a> <span class="k">if</span> <span class="n">expression</span><span class="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_end_exclusive&quot;</span><span class="p">):</span>
+</span><span id="DuckDB.Generator-808"><a href="#DuckDB.Generator-808"><span class="linenos">808</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANGE&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-809"><a href="#DuckDB.Generator-809"><span class="linenos">809</span></a>
+</span><span id="DuckDB.Generator-810"><a href="#DuckDB.Generator-810"><span class="linenos">810</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="DuckDB.Generator-811"><a href="#DuckDB.Generator-811"><span class="linenos">811</span></a>
+</span><span id="DuckDB.Generator-812"><a href="#DuckDB.Generator-812"><span class="linenos">812</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="DuckDB.Generator-813"><a href="#DuckDB.Generator-813"><span class="linenos">813</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="DuckDB.Generator-814"><a href="#DuckDB.Generator-814"><span class="linenos">814</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">Array</span><span class="p">):</span>
+</span><span id="DuckDB.Generator-815"><a href="#DuckDB.Generator-815"><span class="linenos">815</span></a> <span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
+</span><span id="DuckDB.Generator-816"><a href="#DuckDB.Generator-816"><span class="linenos">816</span></a>
+</span><span id="DuckDB.Generator-817"><a href="#DuckDB.Generator-817"><span class="linenos">817</span></a> <span class="n">bracket</span> <span class="o">=</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="DuckDB.Generator-818"><a href="#DuckDB.Generator-818"><span class="linenos">818</span></a>
+</span><span id="DuckDB.Generator-819"><a href="#DuckDB.Generator-819"><span class="linenos">819</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;returns_list_for_maps&quot;</span><span class="p">):</span>
+</span><span id="DuckDB.Generator-820"><a href="#DuckDB.Generator-820"><span class="linenos">820</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="DuckDB.Generator-821"><a href="#DuckDB.Generator-821"><span class="linenos">821</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="DuckDB.Generator-822"><a href="#DuckDB.Generator-822"><span class="linenos">822</span></a>
+</span><span id="DuckDB.Generator-823"><a href="#DuckDB.Generator-823"><span class="linenos">823</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-824"><a href="#DuckDB.Generator-824"><span class="linenos">824</span></a>
+</span><span id="DuckDB.Generator-825"><a href="#DuckDB.Generator-825"><span class="linenos">825</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">):</span>
+</span><span id="DuckDB.Generator-826"><a href="#DuckDB.Generator-826"><span class="linenos">826</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]&quot;</span>
</span><span id="DuckDB.Generator-827"><a href="#DuckDB.Generator-827"><span class="linenos">827</span></a>
-</span><span id="DuckDB.Generator-828"><a href="#DuckDB.Generator-828"><span class="linenos">828</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">):</span>
-</span><span id="DuckDB.Generator-829"><a href="#DuckDB.Generator-829"><span class="linenos">829</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]&quot;</span>
-</span><span id="DuckDB.Generator-830"><a href="#DuckDB.Generator-830"><span class="linenos">830</span></a>
-</span><span id="DuckDB.Generator-831"><a href="#DuckDB.Generator-831"><span class="linenos">831</span></a> <span class="k">return</span> <span class="n">bracket</span>
+</span><span id="DuckDB.Generator-828"><a href="#DuckDB.Generator-828"><span class="linenos">828</span></a> <span class="k">return</span> <span class="n">bracket</span>
+</span><span id="DuckDB.Generator-829"><a href="#DuckDB.Generator-829"><span class="linenos">829</span></a>
+</span><span id="DuckDB.Generator-830"><a href="#DuckDB.Generator-830"><span class="linenos">830</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="DuckDB.Generator-831"><a href="#DuckDB.Generator-831"><span class="linenos">831</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="DuckDB.Generator-832"><a href="#DuckDB.Generator-832"><span class="linenos">832</span></a>
-</span><span id="DuckDB.Generator-833"><a href="#DuckDB.Generator-833"><span class="linenos">833</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="DuckDB.Generator-834"><a href="#DuckDB.Generator-834"><span class="linenos">834</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="DuckDB.Generator-835"><a href="#DuckDB.Generator-835"><span class="linenos">835</span></a>
-</span><span id="DuckDB.Generator-836"><a href="#DuckDB.Generator-836"><span class="linenos">836</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="DuckDB.Generator-837"><a href="#DuckDB.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">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PERCENTILES</span><span class="p">):</span>
-</span><span id="DuckDB.Generator-838"><a href="#DuckDB.Generator-838"><span class="linenos">838</span></a> <span class="c1"># Make the order key the first arg and slide the fraction to the right</span>
-</span><span id="DuckDB.Generator-839"><a href="#DuckDB.Generator-839"><span class="linenos">839</span></a> <span class="c1"># https://duckdb.org/docs/sql/aggregates#ordered-set-aggregate-functions</span>
-</span><span id="DuckDB.Generator-840"><a href="#DuckDB.Generator-840"><span class="linenos">840</span></a> <span class="n">order_col</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">Ordered</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-841"><a href="#DuckDB.Generator-841"><span class="linenos">841</span></a> <span class="k">if</span> <span class="n">order_col</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-842"><a href="#DuckDB.Generator-842"><span class="linenos">842</span></a> <span class="n">func</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">func</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-843"><a href="#DuckDB.Generator-843"><span class="linenos">843</span></a> <span class="n">func</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">order_col</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-844"><a href="#DuckDB.Generator-844"><span class="linenos">844</span></a>
-</span><span id="DuckDB.Generator-845"><a href="#DuckDB.Generator-845"><span class="linenos">845</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span 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="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-846"><a href="#DuckDB.Generator-846"><span class="linenos">846</span></a>
-</span><span id="DuckDB.Generator-847"><a href="#DuckDB.Generator-847"><span class="linenos">847</span></a> <span class="k">return</span> <span 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">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="DuckDB.Generator-833"><a href="#DuckDB.Generator-833"><span class="linenos">833</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="DuckDB.Generator-834"><a href="#DuckDB.Generator-834"><span class="linenos">834</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">PERCENTILES</span><span class="p">):</span>
+</span><span id="DuckDB.Generator-835"><a href="#DuckDB.Generator-835"><span class="linenos">835</span></a> <span class="c1"># Make the order key the first arg and slide the fraction to the right</span>
+</span><span id="DuckDB.Generator-836"><a href="#DuckDB.Generator-836"><span class="linenos">836</span></a> <span class="c1"># https://duckdb.org/docs/sql/aggregates#ordered-set-aggregate-functions</span>
+</span><span id="DuckDB.Generator-837"><a href="#DuckDB.Generator-837"><span class="linenos">837</span></a> <span class="n">order_col</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">Ordered</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-838"><a href="#DuckDB.Generator-838"><span class="linenos">838</span></a> <span class="k">if</span> <span class="n">order_col</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-839"><a href="#DuckDB.Generator-839"><span class="linenos">839</span></a> <span class="n">func</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">func</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-840"><a href="#DuckDB.Generator-840"><span class="linenos">840</span></a> <span class="n">func</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">order_col</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-841"><a href="#DuckDB.Generator-841"><span class="linenos">841</span></a>
+</span><span id="DuckDB.Generator-842"><a href="#DuckDB.Generator-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 class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-843"><a href="#DuckDB.Generator-843"><span class="linenos">843</span></a>
+</span><span id="DuckDB.Generator-844"><a href="#DuckDB.Generator-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="n">this</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+</span><span id="DuckDB.Generator-845"><a href="#DuckDB.Generator-845"><span class="linenos">845</span></a>
+</span><span id="DuckDB.Generator-846"><a href="#DuckDB.Generator-846"><span class="linenos">846</span></a> <span class="k">def</span> <span class="nf">length_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-847"><a href="#DuckDB.Generator-847"><span class="linenos">847</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
</span><span id="DuckDB.Generator-848"><a href="#DuckDB.Generator-848"><span class="linenos">848</span></a>
-</span><span id="DuckDB.Generator-849"><a href="#DuckDB.Generator-849"><span class="linenos">849</span></a> <span class="k">def</span> <span class="nf">length_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-850"><a href="#DuckDB.Generator-850"><span class="linenos">850</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="DuckDB.Generator-851"><a href="#DuckDB.Generator-851"><span class="linenos">851</span></a>
-</span><span id="DuckDB.Generator-852"><a href="#DuckDB.Generator-852"><span class="linenos">852</span></a> <span class="c1"># Dialects like BQ and Snowflake also accept binary values as args, so</span>
-</span><span id="DuckDB.Generator-853"><a href="#DuckDB.Generator-853"><span class="linenos">853</span></a> <span class="c1"># DDB will attempt to infer the type or resort to case/when resolution</span>
-</span><span id="DuckDB.Generator-854"><a href="#DuckDB.Generator-854"><span class="linenos">854</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;binary&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-855"><a href="#DuckDB.Generator-855"><span class="linenos">855</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-849"><a href="#DuckDB.Generator-849"><span class="linenos">849</span></a> <span class="c1"># Dialects like BQ and Snowflake also accept binary values as args, so</span>
+</span><span id="DuckDB.Generator-850"><a href="#DuckDB.Generator-850"><span class="linenos">850</span></a> <span class="c1"># DDB will attempt to infer the type or resort to case/when resolution</span>
+</span><span id="DuckDB.Generator-851"><a href="#DuckDB.Generator-851"><span class="linenos">851</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;binary&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-852"><a href="#DuckDB.Generator-852"><span class="linenos">852</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-853"><a href="#DuckDB.Generator-853"><span class="linenos">853</span></a>
+</span><span id="DuckDB.Generator-854"><a href="#DuckDB.Generator-854"><span class="linenos">854</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">arg</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-855"><a href="#DuckDB.Generator-855"><span class="linenos">855</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="DuckDB.Generator-856"><a href="#DuckDB.Generator-856"><span class="linenos">856</span></a>
-</span><span id="DuckDB.Generator-857"><a href="#DuckDB.Generator-857"><span class="linenos">857</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">arg</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-858"><a href="#DuckDB.Generator-858"><span class="linenos">858</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="DuckDB.Generator-859"><a href="#DuckDB.Generator-859"><span class="linenos">859</span></a>
-</span><span id="DuckDB.Generator-860"><a href="#DuckDB.Generator-860"><span class="linenos">860</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-857"><a href="#DuckDB.Generator-857"><span class="linenos">857</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-858"><a href="#DuckDB.Generator-858"><span class="linenos">858</span></a>
+</span><span id="DuckDB.Generator-859"><a href="#DuckDB.Generator-859"><span class="linenos">859</span></a> <span class="k">if</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="o">*</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span><span class="p">):</span>
+</span><span id="DuckDB.Generator-860"><a href="#DuckDB.Generator-860"><span class="linenos">860</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
</span><span id="DuckDB.Generator-861"><a href="#DuckDB.Generator-861"><span class="linenos">861</span></a>
-</span><span id="DuckDB.Generator-862"><a href="#DuckDB.Generator-862"><span class="linenos">862</span></a> <span class="k">if</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="o">*</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span><span class="p">):</span>
-</span><span id="DuckDB.Generator-863"><a href="#DuckDB.Generator-863"><span class="linenos">863</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-864"><a href="#DuckDB.Generator-864"><span class="linenos">864</span></a>
-</span><span id="DuckDB.Generator-865"><a href="#DuckDB.Generator-865"><span class="linenos">865</span></a> <span class="c1"># We need these casts to make duckdb&#39;s static type checker happy</span>
-</span><span id="DuckDB.Generator-866"><a href="#DuckDB.Generator-866"><span class="linenos">866</span></a> <span class="n">blob</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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><span id="DuckDB.Generator-867"><a href="#DuckDB.Generator-867"><span class="linenos">867</span></a> <span class="n">varchar</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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="DuckDB.Generator-868"><a href="#DuckDB.Generator-868"><span class="linenos">868</span></a>
-</span><span id="DuckDB.Generator-869"><a href="#DuckDB.Generator-869"><span class="linenos">869</span></a> <span class="n">case</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="DuckDB.Generator-870"><a href="#DuckDB.Generator-870"><span class="linenos">870</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">case</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;TYPEOF&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">))</span>
-</span><span id="DuckDB.Generator-871"><a href="#DuckDB.Generator-871"><span class="linenos">871</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span>
-</span><span id="DuckDB.Generator-872"><a href="#DuckDB.Generator-872"><span class="linenos">872</span></a> <span class="s2">&quot;&#39;VARCHAR&#39;&quot;</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;LENGTH&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">varchar</span><span class="p">])</span>
-</span><span id="DuckDB.Generator-873"><a href="#DuckDB.Generator-873"><span class="linenos">873</span></a> <span class="p">)</span> <span class="c1"># anonymous to break length_sql recursion</span>
-</span><span id="DuckDB.Generator-874"><a href="#DuckDB.Generator-874"><span class="linenos">874</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="s2">&quot;&#39;BLOB&#39;&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;OCTET_LENGTH&quot;</span><span class="p">,</span> <span class="n">blob</span><span class="p">))</span>
-</span><span id="DuckDB.Generator-875"><a href="#DuckDB.Generator-875"><span class="linenos">875</span></a> <span class="p">)</span>
-</span><span id="DuckDB.Generator-876"><a href="#DuckDB.Generator-876"><span class="linenos">876</span></a>
-</span><span id="DuckDB.Generator-877"><a href="#DuckDB.Generator-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">case</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-878"><a href="#DuckDB.Generator-878"><span class="linenos">878</span></a>
-</span><span id="DuckDB.Generator-879"><a href="#DuckDB.Generator-879"><span class="linenos">879</span></a> <span class="k">def</span> <span class="nf">objectinsert_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ObjectInsert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-880"><a href="#DuckDB.Generator-880"><span class="linenos">880</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="DuckDB.Generator-881"><a href="#DuckDB.Generator-881"><span class="linenos">881</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;key&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-882"><a href="#DuckDB.Generator-882"><span class="linenos">882</span></a> <span class="n">key_sql</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">key</span><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="DuckDB.Generator-883"><a href="#DuckDB.Generator-883"><span class="linenos">883</span></a> <span class="n">value_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-884"><a href="#DuckDB.Generator-884"><span class="linenos">884</span></a>
-</span><span id="DuckDB.Generator-885"><a href="#DuckDB.Generator-885"><span class="linenos">885</span></a> <span class="n">kv_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">key_sql</span><span class="si">}</span><span class="s2"> := </span><span class="si">{</span><span class="n">value_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="DuckDB.Generator-886"><a href="#DuckDB.Generator-886"><span class="linenos">886</span></a>
-</span><span id="DuckDB.Generator-887"><a href="#DuckDB.Generator-887"><span class="linenos">887</span></a> <span class="c1"># If the input struct is empty e.g. transpiling OBJECT_INSERT(OBJECT_CONSTRUCT(), key, value) from Snowflake</span>
-</span><span id="DuckDB.Generator-888"><a href="#DuckDB.Generator-888"><span class="linenos">888</span></a> <span class="c1"># then we can generate STRUCT_PACK which will build it since STRUCT_INSERT({}, key := value) is not valid DuckDB</span>
-</span><span id="DuckDB.Generator-889"><a href="#DuckDB.Generator-889"><span class="linenos">889</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">Struct</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">expressions</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-890"><a href="#DuckDB.Generator-890"><span class="linenos">890</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_PACK&quot;</span><span class="p">,</span> <span class="n">kv_sql</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-891"><a href="#DuckDB.Generator-891"><span class="linenos">891</span></a>
-</span><span id="DuckDB.Generator-892"><a href="#DuckDB.Generator-892"><span class="linenos">892</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_INSERT&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">kv_sql</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-893"><a href="#DuckDB.Generator-893"><span class="linenos">893</span></a>
-</span><span id="DuckDB.Generator-894"><a href="#DuckDB.Generator-894"><span class="linenos">894</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="DuckDB.Generator-895"><a href="#DuckDB.Generator-895"><span class="linenos">895</span></a> <span class="n">explode_array</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;explode_array&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-896"><a href="#DuckDB.Generator-896"><span class="linenos">896</span></a> <span class="k">if</span> <span class="n">explode_array</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-897"><a href="#DuckDB.Generator-897"><span class="linenos">897</span></a> <span class="c1"># In BigQuery, UNNESTing a nested array leads to explosion of the top-level array &amp; struct</span>
-</span><span id="DuckDB.Generator-898"><a href="#DuckDB.Generator-898"><span class="linenos">898</span></a> <span class="c1"># This is transpiled to DDB by transforming &quot;FROM UNNEST(...)&quot; to &quot;FROM (SELECT UNNEST(..., max_depth =&gt; 2))&quot;</span>
-</span><span id="DuckDB.Generator-899"><a href="#DuckDB.Generator-899"><span class="linenos">899</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="DuckDB.Generator-900"><a href="#DuckDB.Generator-900"><span class="linenos">900</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">(</span><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="s2">&quot;max_depth&quot;</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="DuckDB.Generator-901"><a href="#DuckDB.Generator-901"><span class="linenos">901</span></a> <span class="p">)</span>
-</span><span id="DuckDB.Generator-902"><a href="#DuckDB.Generator-902"><span class="linenos">902</span></a>
-</span><span id="DuckDB.Generator-903"><a href="#DuckDB.Generator-903"><span class="linenos">903</span></a> <span class="c1"># If BQ&#39;s UNNEST is aliased, we transform it from a column alias to a table alias in DDB</span>
-</span><span id="DuckDB.Generator-904"><a href="#DuckDB.Generator-904"><span class="linenos">904</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="DuckDB.Generator-905"><a href="#DuckDB.Generator-905"><span class="linenos">905</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="DuckDB.Generator-906"><a href="#DuckDB.Generator-906"><span class="linenos">906</span></a> <span class="n">expression</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="DuckDB.Generator-907"><a href="#DuckDB.Generator-907"><span class="linenos">907</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">seq_get</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">),</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="DuckDB.Generator-908"><a href="#DuckDB.Generator-908"><span class="linenos">908</span></a>
-</span><span id="DuckDB.Generator-909"><a href="#DuckDB.Generator-909"><span class="linenos">909</span></a> <span class="n">unnest_sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-910"><a href="#DuckDB.Generator-910"><span class="linenos">910</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">unnest_sql</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="DuckDB.Generator-911"><a href="#DuckDB.Generator-911"><span class="linenos">911</span></a> <span 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">select</span><span class="p">)</span>
-</span><span id="DuckDB.Generator-912"><a href="#DuckDB.Generator-912"><span class="linenos">912</span></a>
-</span><span id="DuckDB.Generator-913"><a href="#DuckDB.Generator-913"><span class="linenos">913</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-862"><a href="#DuckDB.Generator-862"><span class="linenos">862</span></a> <span class="c1"># We need these casts to make duckdb&#39;s static type checker happy</span>
+</span><span id="DuckDB.Generator-863"><a href="#DuckDB.Generator-863"><span class="linenos">863</span></a> <span class="n">blob</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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><span id="DuckDB.Generator-864"><a href="#DuckDB.Generator-864"><span class="linenos">864</span></a> <span class="n">varchar</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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="DuckDB.Generator-865"><a href="#DuckDB.Generator-865"><span class="linenos">865</span></a>
+</span><span id="DuckDB.Generator-866"><a href="#DuckDB.Generator-866"><span class="linenos">866</span></a> <span class="n">case</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="DuckDB.Generator-867"><a href="#DuckDB.Generator-867"><span class="linenos">867</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">case</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;TYPEOF&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">))</span>
+</span><span id="DuckDB.Generator-868"><a href="#DuckDB.Generator-868"><span class="linenos">868</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span>
+</span><span id="DuckDB.Generator-869"><a href="#DuckDB.Generator-869"><span class="linenos">869</span></a> <span class="s2">&quot;&#39;VARCHAR&#39;&quot;</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;LENGTH&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">varchar</span><span class="p">])</span>
+</span><span id="DuckDB.Generator-870"><a href="#DuckDB.Generator-870"><span class="linenos">870</span></a> <span class="p">)</span> <span class="c1"># anonymous to break length_sql recursion</span>
+</span><span id="DuckDB.Generator-871"><a href="#DuckDB.Generator-871"><span class="linenos">871</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="s2">&quot;&#39;BLOB&#39;&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;OCTET_LENGTH&quot;</span><span class="p">,</span> <span class="n">blob</span><span class="p">))</span>
+</span><span id="DuckDB.Generator-872"><a href="#DuckDB.Generator-872"><span class="linenos">872</span></a> <span class="p">)</span>
+</span><span id="DuckDB.Generator-873"><a href="#DuckDB.Generator-873"><span class="linenos">873</span></a>
+</span><span id="DuckDB.Generator-874"><a href="#DuckDB.Generator-874"><span class="linenos">874</span></a> <span 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="DuckDB.Generator-875"><a href="#DuckDB.Generator-875"><span class="linenos">875</span></a>
+</span><span id="DuckDB.Generator-876"><a href="#DuckDB.Generator-876"><span class="linenos">876</span></a> <span class="k">def</span> <span class="nf">objectinsert_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ObjectInsert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-877"><a href="#DuckDB.Generator-877"><span class="linenos">877</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="DuckDB.Generator-878"><a href="#DuckDB.Generator-878"><span class="linenos">878</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;key&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-879"><a href="#DuckDB.Generator-879"><span class="linenos">879</span></a> <span class="n">key_sql</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">key</span><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="DuckDB.Generator-880"><a href="#DuckDB.Generator-880"><span class="linenos">880</span></a> <span class="n">value_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-881"><a href="#DuckDB.Generator-881"><span class="linenos">881</span></a>
+</span><span id="DuckDB.Generator-882"><a href="#DuckDB.Generator-882"><span class="linenos">882</span></a> <span class="n">kv_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">key_sql</span><span class="si">}</span><span class="s2"> := </span><span class="si">{</span><span class="n">value_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="DuckDB.Generator-883"><a href="#DuckDB.Generator-883"><span class="linenos">883</span></a>
+</span><span id="DuckDB.Generator-884"><a href="#DuckDB.Generator-884"><span class="linenos">884</span></a> <span class="c1"># If the input struct is empty e.g. transpiling OBJECT_INSERT(OBJECT_CONSTRUCT(), key, value) from Snowflake</span>
+</span><span id="DuckDB.Generator-885"><a href="#DuckDB.Generator-885"><span class="linenos">885</span></a> <span class="c1"># then we can generate STRUCT_PACK which will build it since STRUCT_INSERT({}, key := value) is not valid DuckDB</span>
+</span><span id="DuckDB.Generator-886"><a href="#DuckDB.Generator-886"><span class="linenos">886</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">Struct</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">expressions</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-887"><a href="#DuckDB.Generator-887"><span class="linenos">887</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_PACK&quot;</span><span class="p">,</span> <span class="n">kv_sql</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-888"><a href="#DuckDB.Generator-888"><span class="linenos">888</span></a>
+</span><span id="DuckDB.Generator-889"><a href="#DuckDB.Generator-889"><span class="linenos">889</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_INSERT&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">kv_sql</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-890"><a href="#DuckDB.Generator-890"><span class="linenos">890</span></a>
+</span><span id="DuckDB.Generator-891"><a href="#DuckDB.Generator-891"><span class="linenos">891</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="DuckDB.Generator-892"><a href="#DuckDB.Generator-892"><span class="linenos">892</span></a> <span class="n">explode_array</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;explode_array&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-893"><a href="#DuckDB.Generator-893"><span class="linenos">893</span></a> <span class="k">if</span> <span class="n">explode_array</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-894"><a href="#DuckDB.Generator-894"><span class="linenos">894</span></a> <span class="c1"># In BigQuery, UNNESTing a nested array leads to explosion of the top-level array &amp; struct</span>
+</span><span id="DuckDB.Generator-895"><a href="#DuckDB.Generator-895"><span class="linenos">895</span></a> <span class="c1"># This is transpiled to DDB by transforming &quot;FROM UNNEST(...)&quot; to &quot;FROM (SELECT UNNEST(..., max_depth =&gt; 2))&quot;</span>
+</span><span id="DuckDB.Generator-896"><a href="#DuckDB.Generator-896"><span class="linenos">896</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="DuckDB.Generator-897"><a href="#DuckDB.Generator-897"><span class="linenos">897</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">(</span><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="s2">&quot;max_depth&quot;</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="DuckDB.Generator-898"><a href="#DuckDB.Generator-898"><span class="linenos">898</span></a> <span class="p">)</span>
+</span><span id="DuckDB.Generator-899"><a href="#DuckDB.Generator-899"><span class="linenos">899</span></a>
+</span><span id="DuckDB.Generator-900"><a href="#DuckDB.Generator-900"><span class="linenos">900</span></a> <span class="c1"># If BQ&#39;s UNNEST is aliased, we transform it from a column alias to a table alias in DDB</span>
+</span><span id="DuckDB.Generator-901"><a href="#DuckDB.Generator-901"><span class="linenos">901</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="DuckDB.Generator-902"><a href="#DuckDB.Generator-902"><span class="linenos">902</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="DuckDB.Generator-903"><a href="#DuckDB.Generator-903"><span class="linenos">903</span></a> <span class="n">expression</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="DuckDB.Generator-904"><a href="#DuckDB.Generator-904"><span class="linenos">904</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">seq_get</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">),</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="DuckDB.Generator-905"><a href="#DuckDB.Generator-905"><span class="linenos">905</span></a>
+</span><span id="DuckDB.Generator-906"><a href="#DuckDB.Generator-906"><span class="linenos">906</span></a> <span class="n">unnest_sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-907"><a href="#DuckDB.Generator-907"><span class="linenos">907</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">unnest_sql</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="DuckDB.Generator-908"><a href="#DuckDB.Generator-908"><span class="linenos">908</span></a> <span 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">select</span><span class="p">)</span>
+</span><span id="DuckDB.Generator-909"><a href="#DuckDB.Generator-909"><span class="linenos">909</span></a>
+</span><span id="DuckDB.Generator-910"><a href="#DuckDB.Generator-910"><span class="linenos">910</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -3913,7 +3904,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">SUPPORTED_JSON_PATH_PARTS</span> =
<input id="DuckDB.Generator.SUPPORTED_JSON_PATH_PARTS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="DuckDB.Generator.SUPPORTED_JSON_PATH_PARTS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="DuckDB.Generator.SUPPORTED_JSON_PATH_PARTS-view-value"></label><span class="default_value">{&lt;class &#39;<a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>&#39;&gt;, &lt;class &#39;<a href="../expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>&#39;&gt;}</span>
</div>
@@ -3939,7 +3930,7 @@ Default: True</li>
<div class="attr variable">
<span class="name">RESERVED_KEYWORDS</span> =
<input id="DuckDB.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="DuckDB.Generator.RESERVED_KEYWORDS-view-value"></label><span class="default_value">{&#39;from&#39;, &#39;else&#39;, &#39;user&#39;, &#39;unique&#39;, &#39;union&#39;, &#39;cast&#39;, &#39;then&#39;, &#39;current_timestamp&#39;, &#39;as&#39;, &#39;offset&#39;, &#39;using&#39;, &#39;localtimestamp&#39;, &#39;with&#39;, &#39;and&#39;, &#39;trailing&#39;, &#39;table&#39;, &#39;distinct&#39;, &#39;or&#39;, &#39;for&#39;, &#39;primary&#39;, &#39;asymmetric&#39;, &#39;create_p&#39;, &#39;do&#39;, &#39;some&#39;, &#39;except&#39;, &#39;variadic&#39;, &#39;end_p&#39;, &#39;intersect&#39;, &#39;in_p&#39;, &#39;when&#39;, &#39;where&#39;, &#39;false_p&#39;, &#39;window&#39;, &#39;returning&#39;, &#39;both&#39;, &#39;group_p&#39;, &#39;all&#39;, &#39;desc_p&#39;, &#39;placing&#39;, &#39;current_catalog&#39;, &#39;analyse&#39;, &#39;initially&#39;, &#39;true_p&#39;, &#39;check_p&#39;, &#39;not&#39;, &#39;select&#39;, &#39;on&#39;, &#39;limit&#39;, &#39;column&#39;, &#39;current_time&#39;, &#39;having&#39;, &#39;current_date&#39;, &#39;current_user&#39;, &#39;current_role&#39;, &#39;session_user&#39;, &#39;analyze&#39;, &#39;localtime&#39;, &#39;fetch&#39;, &#39;order&#39;, &#39;array&#39;, &#39;asc_p&#39;, &#39;foreign&#39;, &#39;collate&#39;, &#39;any&#39;, &#39;grant&#39;, &#39;leading&#39;, &#39;constraint&#39;, &#39;case&#39;, &#39;symmetric&#39;, &#39;deferrable&#39;, &#39;null_p&#39;, &#39;references&#39;, &#39;only&#39;, &#39;default&#39;, &#39;lateral_p&#39;, &#39;to&#39;, &#39;into&#39;}</span>
+ <label class="view-value-button pdoc-button" for="DuckDB.Generator.RESERVED_KEYWORDS-view-value"></label><span class="default_value">{&#39;end_p&#39;, &#39;cast&#39;, &#39;check_p&#39;, &#39;where&#39;, &#39;all&#39;, &#39;do&#39;, &#39;desc_p&#39;, &#39;both&#39;, &#39;in_p&#39;, &#39;asymmetric&#39;, &#39;offset&#39;, &#39;analyze&#39;, &#39;deferrable&#39;, &#39;into&#39;, &#39;and&#39;, &#39;window&#39;, &#39;or&#39;, &#39;analyse&#39;, &#39;lateral_p&#39;, &#39;not&#39;, &#39;fetch&#39;, &#39;current_date&#39;, &#39;primary&#39;, &#39;current_role&#39;, &#39;trailing&#39;, &#39;on&#39;, &#39;from&#39;, &#39;session_user&#39;, &#39;current_user&#39;, &#39;using&#39;, &#39;localtime&#39;, &#39;placing&#39;, &#39;initially&#39;, &#39;asc_p&#39;, &#39;unique&#39;, &#39;grant&#39;, &#39;constraint&#39;, &#39;as&#39;, &#39;only&#39;, &#39;null_p&#39;, &#39;references&#39;, &#39;create_p&#39;, &#39;intersect&#39;, &#39;then&#39;, &#39;when&#39;, &#39;false_p&#39;, &#39;for&#39;, &#39;limit&#39;, &#39;any&#39;, &#39;table&#39;, &#39;default&#39;, &#39;symmetric&#39;, &#39;having&#39;, &#39;true_p&#39;, &#39;distinct&#39;, &#39;except&#39;, &#39;else&#39;, &#39;leading&#39;, &#39;variadic&#39;, &#39;to&#39;, &#39;case&#39;, &#39;order&#39;, &#39;current_catalog&#39;, &#39;column&#39;, &#39;localtimestamp&#39;, &#39;collate&#39;, &#39;with&#39;, &#39;some&#39;, &#39;current_time&#39;, &#39;user&#39;, &#39;current_timestamp&#39;, &#39;select&#39;, &#39;array&#39;, &#39;foreign&#39;, &#39;union&#39;, &#39;returning&#39;, &#39;group_p&#39;}</span>
</div>
@@ -4120,7 +4111,7 @@ Default: True</li>
<div class="attr function">
<span class="def">def</span>
- <span class="name">tablesample_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a></span>,</span><span class="param"> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39; AS &#39;</span>,</span><span class="param"> <span class="n">tablesample_keyword</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="return-annotation">) -> <span class="nb">str</span>:</span></span>
+ <span class="name">tablesample_sql</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">expression</span><span class="p">:</span> <span class="n"><a href="../expressions.html#TableSample">sqlglot.expressions.TableSample</a></span>,</span><span class="param"> <span class="n">tablesample_keyword</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="return-annotation">) -> <span class="nb">str</span>:</span></span>
<label class="view-source-button" for="DuckDB.Generator.tablesample_sql-view-source"><span>View Source</span></label>
@@ -4129,25 +4120,22 @@ Default: True</li>
<div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.tablesample_sql-754"><a href="#DuckDB.Generator.tablesample_sql-754"><span class="linenos">754</span></a> <span class="k">def</span> <span class="nf">tablesample_sql</span><span class="p">(</span>
</span><span id="DuckDB.Generator.tablesample_sql-755"><a href="#DuckDB.Generator.tablesample_sql-755"><span class="linenos">755</span></a> <span class="bp">self</span><span class="p">,</span>
</span><span id="DuckDB.Generator.tablesample_sql-756"><a href="#DuckDB.Generator.tablesample_sql-756"><span class="linenos">756</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="DuckDB.Generator.tablesample_sql-757"><a href="#DuckDB.Generator.tablesample_sql-757"><span class="linenos">757</span></a> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; AS &quot;</span><span class="p">,</span>
-</span><span id="DuckDB.Generator.tablesample_sql-758"><a href="#DuckDB.Generator.tablesample_sql-758"><span class="linenos">758</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="DuckDB.Generator.tablesample_sql-759"><a href="#DuckDB.Generator.tablesample_sql-759"><span class="linenos">759</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-760"><a href="#DuckDB.Generator.tablesample_sql-760"><span class="linenos">760</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
-</span><span id="DuckDB.Generator.tablesample_sql-761"><a href="#DuckDB.Generator.tablesample_sql-761"><span class="linenos">761</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
-</span><span id="DuckDB.Generator.tablesample_sql-762"><a href="#DuckDB.Generator.tablesample_sql-762"><span class="linenos">762</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
-</span><span id="DuckDB.Generator.tablesample_sql-763"><a href="#DuckDB.Generator.tablesample_sql-763"><span class="linenos">763</span></a>
-</span><span id="DuckDB.Generator.tablesample_sql-764"><a href="#DuckDB.Generator.tablesample_sql-764"><span class="linenos">764</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;size&quot;</span><span class="p">):</span>
-</span><span id="DuckDB.Generator.tablesample_sql-765"><a href="#DuckDB.Generator.tablesample_sql-765"><span class="linenos">765</span></a> <span class="n">method</span> <span class="o">=</span> <span class="n">expression</span><span class="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="DuckDB.Generator.tablesample_sql-766"><a href="#DuckDB.Generator.tablesample_sql-766"><span class="linenos">766</span></a> <span class="k">if</span> <span class="n">method</span> <span class="ow">and</span> <span class="n">method</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;RESERVOIR&quot;</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.tablesample_sql-767"><a href="#DuckDB.Generator.tablesample_sql-767"><span class="linenos">767</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
-</span><span id="DuckDB.Generator.tablesample_sql-768"><a href="#DuckDB.Generator.tablesample_sql-768"><span class="linenos">768</span></a> <span class="sa">f</span><span class="s2">&quot;Sampling method </span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2"> is not supported with a discrete sample count, &quot;</span>
-</span><span id="DuckDB.Generator.tablesample_sql-769"><a href="#DuckDB.Generator.tablesample_sql-769"><span class="linenos">769</span></a> <span class="s2">&quot;defaulting to reservoir sampling&quot;</span>
-</span><span id="DuckDB.Generator.tablesample_sql-770"><a href="#DuckDB.Generator.tablesample_sql-770"><span class="linenos">770</span></a> <span class="p">)</span>
-</span><span id="DuckDB.Generator.tablesample_sql-771"><a href="#DuckDB.Generator.tablesample_sql-771"><span class="linenos">771</span></a> <span class="n">expression</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">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;RESERVOIR&quot;</span><span class="p">))</span>
-</span><span id="DuckDB.Generator.tablesample_sql-772"><a href="#DuckDB.Generator.tablesample_sql-772"><span class="linenos">772</span></a>
-</span><span id="DuckDB.Generator.tablesample_sql-773"><a href="#DuckDB.Generator.tablesample_sql-773"><span class="linenos">773</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tablesample_sql</span><span class="p">(</span>
-</span><span id="DuckDB.Generator.tablesample_sql-774"><a href="#DuckDB.Generator.tablesample_sql-774"><span class="linenos">774</span></a> <span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">,</span> <span class="n">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span>
-</span><span id="DuckDB.Generator.tablesample_sql-775"><a href="#DuckDB.Generator.tablesample_sql-775"><span class="linenos">775</span></a> <span class="p">)</span>
+</span><span id="DuckDB.Generator.tablesample_sql-757"><a href="#DuckDB.Generator.tablesample_sql-757"><span class="linenos">757</span></a> <span class="n">tablesample_keyword</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="DuckDB.Generator.tablesample_sql-758"><a href="#DuckDB.Generator.tablesample_sql-758"><span class="linenos">758</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-759"><a href="#DuckDB.Generator.tablesample_sql-759"><span class="linenos">759</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
+</span><span id="DuckDB.Generator.tablesample_sql-760"><a href="#DuckDB.Generator.tablesample_sql-760"><span class="linenos">760</span></a> <span class="c1"># This sample clause only applies to a single source, not the entire resulting relation</span>
+</span><span id="DuckDB.Generator.tablesample_sql-761"><a href="#DuckDB.Generator.tablesample_sql-761"><span class="linenos">761</span></a> <span class="n">tablesample_keyword</span> <span class="o">=</span> <span class="s2">&quot;TABLESAMPLE&quot;</span>
+</span><span id="DuckDB.Generator.tablesample_sql-762"><a href="#DuckDB.Generator.tablesample_sql-762"><span class="linenos">762</span></a>
+</span><span id="DuckDB.Generator.tablesample_sql-763"><a href="#DuckDB.Generator.tablesample_sql-763"><span class="linenos">763</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;size&quot;</span><span class="p">):</span>
+</span><span id="DuckDB.Generator.tablesample_sql-764"><a href="#DuckDB.Generator.tablesample_sql-764"><span class="linenos">764</span></a> <span class="n">method</span> <span class="o">=</span> <span class="n">expression</span><span class="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="DuckDB.Generator.tablesample_sql-765"><a href="#DuckDB.Generator.tablesample_sql-765"><span class="linenos">765</span></a> <span class="k">if</span> <span class="n">method</span> <span class="ow">and</span> <span class="n">method</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;RESERVOIR&quot;</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.tablesample_sql-766"><a href="#DuckDB.Generator.tablesample_sql-766"><span class="linenos">766</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">unsupported</span><span class="p">(</span>
+</span><span id="DuckDB.Generator.tablesample_sql-767"><a href="#DuckDB.Generator.tablesample_sql-767"><span class="linenos">767</span></a> <span class="sa">f</span><span class="s2">&quot;Sampling method </span><span class="si">{</span><span class="n">method</span><span class="si">}</span><span class="s2"> is not supported with a discrete sample count, &quot;</span>
+</span><span id="DuckDB.Generator.tablesample_sql-768"><a href="#DuckDB.Generator.tablesample_sql-768"><span class="linenos">768</span></a> <span class="s2">&quot;defaulting to reservoir sampling&quot;</span>
+</span><span id="DuckDB.Generator.tablesample_sql-769"><a href="#DuckDB.Generator.tablesample_sql-769"><span class="linenos">769</span></a> <span class="p">)</span>
+</span><span id="DuckDB.Generator.tablesample_sql-770"><a href="#DuckDB.Generator.tablesample_sql-770"><span class="linenos">770</span></a> <span class="n">expression</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">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;RESERVOIR&quot;</span><span class="p">))</span>
+</span><span id="DuckDB.Generator.tablesample_sql-771"><a href="#DuckDB.Generator.tablesample_sql-771"><span class="linenos">771</span></a>
+</span><span id="DuckDB.Generator.tablesample_sql-772"><a href="#DuckDB.Generator.tablesample_sql-772"><span class="linenos">772</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">tablesample_keyword</span><span class="o">=</span><span class="n">tablesample_keyword</span><span class="p">)</span>
</span></pre></div>
@@ -4165,19 +4153,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-777"><a href="#DuckDB.Generator.interval_sql-777"><span class="linenos">777</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-778"><a href="#DuckDB.Generator.interval_sql-778"><span class="linenos">778</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-779"><a href="#DuckDB.Generator.interval_sql-779"><span class="linenos">779</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-780"><a href="#DuckDB.Generator.interval_sql-780"><span class="linenos">780</span></a>
-</span><span id="DuckDB.Generator.interval_sql-781"><a href="#DuckDB.Generator.interval_sql-781"><span class="linenos">781</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-782"><a href="#DuckDB.Generator.interval_sql-782"><span class="linenos">782</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
-</span><span id="DuckDB.Generator.interval_sql-783"><a href="#DuckDB.Generator.interval_sql-783"><span class="linenos">783</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-784"><a href="#DuckDB.Generator.interval_sql-784"><span class="linenos">784</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.interval_sql-774"><a href="#DuckDB.Generator.interval_sql-774"><span class="linenos">774</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-775"><a href="#DuckDB.Generator.interval_sql-775"><span class="linenos">775</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-776"><a href="#DuckDB.Generator.interval_sql-776"><span class="linenos">776</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-777"><a href="#DuckDB.Generator.interval_sql-777"><span class="linenos">777</span></a>
+</span><span id="DuckDB.Generator.interval_sql-778"><a href="#DuckDB.Generator.interval_sql-778"><span class="linenos">778</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-779"><a href="#DuckDB.Generator.interval_sql-779"><span class="linenos">779</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">7</span>
+</span><span id="DuckDB.Generator.interval_sql-780"><a href="#DuckDB.Generator.interval_sql-780"><span class="linenos">780</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-781"><a href="#DuckDB.Generator.interval_sql-781"><span class="linenos">781</span></a> <span class="n">multiplier</span> <span class="o">=</span> <span class="mi">90</span>
+</span><span id="DuckDB.Generator.interval_sql-782"><a href="#DuckDB.Generator.interval_sql-782"><span class="linenos">782</span></a>
+</span><span id="DuckDB.Generator.interval_sql-783"><a href="#DuckDB.Generator.interval_sql-783"><span class="linenos">783</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.interval_sql-784"><a href="#DuckDB.Generator.interval_sql-784"><span class="linenos">784</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
</span><span id="DuckDB.Generator.interval_sql-785"><a href="#DuckDB.Generator.interval_sql-785"><span class="linenos">785</span></a>
-</span><span id="DuckDB.Generator.interval_sql-786"><a href="#DuckDB.Generator.interval_sql-786"><span class="linenos">786</span></a> <span class="k">if</span> <span class="n">multiplier</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.interval_sql-787"><a href="#DuckDB.Generator.interval_sql-787"><span class="linenos">787</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">multiplier</span><span class="si">}</span><span class="s2"> * </span><span class="si">{</span><span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">interval_sql</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s1">&#39;DAY&#39;</span><span class="p">)))</span><span class="si">}</span><span class="s2">)&quot;</span>
-</span><span id="DuckDB.Generator.interval_sql-788"><a href="#DuckDB.Generator.interval_sql-788"><span class="linenos">788</span></a>
-</span><span id="DuckDB.Generator.interval_sql-789"><a href="#DuckDB.Generator.interval_sql-789"><span class="linenos">789</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.interval_sql-786"><a href="#DuckDB.Generator.interval_sql-786"><span class="linenos">786</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>
@@ -4195,10 +4183,10 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.columndef_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.columndef_sql-791"><a href="#DuckDB.Generator.columndef_sql-791"><span class="linenos">791</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.columndef_sql-792"><a href="#DuckDB.Generator.columndef_sql-792"><span class="linenos">792</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">):</span>
-</span><span id="DuckDB.Generator.columndef_sql-793"><a href="#DuckDB.Generator.columndef_sql-793"><span class="linenos">793</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.columndef_sql-794"><a href="#DuckDB.Generator.columndef_sql-794"><span class="linenos">794</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.columndef_sql-788"><a href="#DuckDB.Generator.columndef_sql-788"><span class="linenos">788</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.columndef_sql-789"><a href="#DuckDB.Generator.columndef_sql-789"><span class="linenos">789</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">):</span>
+</span><span id="DuckDB.Generator.columndef_sql-790"><a href="#DuckDB.Generator.columndef_sql-790"><span class="linenos">790</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;this&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.columndef_sql-791"><a href="#DuckDB.Generator.columndef_sql-791"><span class="linenos">791</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">sep</span><span class="p">)</span>
</span></pre></div>
@@ -4216,17 +4204,17 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.join_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.join_sql-796"><a href="#DuckDB.Generator.join_sql-796"><span class="linenos">796</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="DuckDB.Generator.join_sql-797"><a href="#DuckDB.Generator.join_sql-797"><span class="linenos">797</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="DuckDB.Generator.join_sql-798"><a href="#DuckDB.Generator.join_sql-798"><span class="linenos">798</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span> <span class="o">==</span> <span class="s2">&quot;LEFT&quot;</span>
-</span><span id="DuckDB.Generator.join_sql-799"><a href="#DuckDB.Generator.join_sql-799"><span class="linenos">799</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.join_sql-800"><a href="#DuckDB.Generator.join_sql-800"><span class="linenos">800</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="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.join_sql-801"><a href="#DuckDB.Generator.join_sql-801"><span class="linenos">801</span></a> <span class="p">):</span>
-</span><span id="DuckDB.Generator.join_sql-802"><a href="#DuckDB.Generator.join_sql-802"><span class="linenos">802</span></a> <span class="c1"># Some dialects support `LEFT JOIN UNNEST(...)` without an explicit ON clause</span>
-</span><span id="DuckDB.Generator.join_sql-803"><a href="#DuckDB.Generator.join_sql-803"><span class="linenos">803</span></a> <span class="c1"># DuckDB doesn&#39;t, but we can just add a dummy ON clause that is always true</span>
-</span><span id="DuckDB.Generator.join_sql-804"><a href="#DuckDB.Generator.join_sql-804"><span class="linenos">804</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()))</span>
-</span><span id="DuckDB.Generator.join_sql-805"><a href="#DuckDB.Generator.join_sql-805"><span class="linenos">805</span></a>
-</span><span id="DuckDB.Generator.join_sql-806"><a href="#DuckDB.Generator.join_sql-806"><span class="linenos">806</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_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.join_sql-793"><a href="#DuckDB.Generator.join_sql-793"><span class="linenos">793</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="DuckDB.Generator.join_sql-794"><a href="#DuckDB.Generator.join_sql-794"><span class="linenos">794</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="DuckDB.Generator.join_sql-795"><a href="#DuckDB.Generator.join_sql-795"><span class="linenos">795</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">side</span> <span class="o">==</span> <span class="s2">&quot;LEFT&quot;</span>
+</span><span id="DuckDB.Generator.join_sql-796"><a href="#DuckDB.Generator.join_sql-796"><span class="linenos">796</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;on&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.join_sql-797"><a href="#DuckDB.Generator.join_sql-797"><span class="linenos">797</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="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.join_sql-798"><a href="#DuckDB.Generator.join_sql-798"><span class="linenos">798</span></a> <span class="p">):</span>
+</span><span id="DuckDB.Generator.join_sql-799"><a href="#DuckDB.Generator.join_sql-799"><span class="linenos">799</span></a> <span class="c1"># Some dialects support `LEFT JOIN UNNEST(...)` without an explicit ON clause</span>
+</span><span id="DuckDB.Generator.join_sql-800"><a href="#DuckDB.Generator.join_sql-800"><span class="linenos">800</span></a> <span class="c1"># DuckDB doesn&#39;t, but we can just add a dummy ON clause that is always true</span>
+</span><span id="DuckDB.Generator.join_sql-801"><a href="#DuckDB.Generator.join_sql-801"><span class="linenos">801</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_sql</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">on</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">true</span><span class="p">()))</span>
+</span><span id="DuckDB.Generator.join_sql-802"><a href="#DuckDB.Generator.join_sql-802"><span class="linenos">802</span></a>
+</span><span id="DuckDB.Generator.join_sql-803"><a href="#DuckDB.Generator.join_sql-803"><span class="linenos">803</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">join_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@@ -4244,12 +4232,12 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.generateseries_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.generateseries_sql-808"><a href="#DuckDB.Generator.generateseries_sql-808"><span class="linenos">808</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="DuckDB.Generator.generateseries_sql-809"><a href="#DuckDB.Generator.generateseries_sql-809"><span class="linenos">809</span></a> <span class="c1"># GENERATE_SERIES(a, b) -&gt; [a, b], RANGE(a, b) -&gt; [a, b)</span>
-</span><span id="DuckDB.Generator.generateseries_sql-810"><a href="#DuckDB.Generator.generateseries_sql-810"><span class="linenos">810</span></a> <span class="k">if</span> <span class="n">expression</span><span class="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_end_exclusive&quot;</span><span class="p">):</span>
-</span><span id="DuckDB.Generator.generateseries_sql-811"><a href="#DuckDB.Generator.generateseries_sql-811"><span class="linenos">811</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANGE&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.generateseries_sql-812"><a href="#DuckDB.Generator.generateseries_sql-812"><span class="linenos">812</span></a>
-</span><span id="DuckDB.Generator.generateseries_sql-813"><a href="#DuckDB.Generator.generateseries_sql-813"><span class="linenos">813</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">function_fallback_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.generateseries_sql-805"><a href="#DuckDB.Generator.generateseries_sql-805"><span class="linenos">805</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="DuckDB.Generator.generateseries_sql-806"><a href="#DuckDB.Generator.generateseries_sql-806"><span class="linenos">806</span></a> <span class="c1"># GENERATE_SERIES(a, b) -&gt; [a, b], RANGE(a, b) -&gt; [a, b)</span>
+</span><span id="DuckDB.Generator.generateseries_sql-807"><a href="#DuckDB.Generator.generateseries_sql-807"><span class="linenos">807</span></a> <span class="k">if</span> <span class="n">expression</span><span class="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_end_exclusive&quot;</span><span class="p">):</span>
+</span><span id="DuckDB.Generator.generateseries_sql-808"><a href="#DuckDB.Generator.generateseries_sql-808"><span class="linenos">808</span></a> <span class="k">return</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;RANGE&quot;</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.generateseries_sql-809"><a href="#DuckDB.Generator.generateseries_sql-809"><span class="linenos">809</span></a>
+</span><span id="DuckDB.Generator.generateseries_sql-810"><a href="#DuckDB.Generator.generateseries_sql-810"><span class="linenos">810</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>
@@ -4267,23 +4255,23 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.bracket_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.bracket_sql-815"><a href="#DuckDB.Generator.bracket_sql-815"><span class="linenos">815</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="DuckDB.Generator.bracket_sql-816"><a href="#DuckDB.Generator.bracket_sql-816"><span class="linenos">816</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="DuckDB.Generator.bracket_sql-817"><a href="#DuckDB.Generator.bracket_sql-817"><span class="linenos">817</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">Array</span><span class="p">):</span>
-</span><span id="DuckDB.Generator.bracket_sql-818"><a href="#DuckDB.Generator.bracket_sql-818"><span class="linenos">818</span></a> <span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
-</span><span id="DuckDB.Generator.bracket_sql-819"><a href="#DuckDB.Generator.bracket_sql-819"><span class="linenos">819</span></a>
-</span><span id="DuckDB.Generator.bracket_sql-820"><a href="#DuckDB.Generator.bracket_sql-820"><span class="linenos">820</span></a> <span class="n">bracket</span> <span class="o">=</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="DuckDB.Generator.bracket_sql-821"><a href="#DuckDB.Generator.bracket_sql-821"><span class="linenos">821</span></a>
-</span><span id="DuckDB.Generator.bracket_sql-822"><a href="#DuckDB.Generator.bracket_sql-822"><span class="linenos">822</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;returns_list_for_maps&quot;</span><span class="p">):</span>
-</span><span id="DuckDB.Generator.bracket_sql-823"><a href="#DuckDB.Generator.bracket_sql-823"><span class="linenos">823</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="DuckDB.Generator.bracket_sql-824"><a href="#DuckDB.Generator.bracket_sql-824"><span class="linenos">824</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="DuckDB.Generator.bracket_sql-825"><a href="#DuckDB.Generator.bracket_sql-825"><span class="linenos">825</span></a>
-</span><span id="DuckDB.Generator.bracket_sql-826"><a href="#DuckDB.Generator.bracket_sql-826"><span class="linenos">826</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.bracket_sql-812"><a href="#DuckDB.Generator.bracket_sql-812"><span class="linenos">812</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="DuckDB.Generator.bracket_sql-813"><a href="#DuckDB.Generator.bracket_sql-813"><span class="linenos">813</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="DuckDB.Generator.bracket_sql-814"><a href="#DuckDB.Generator.bracket_sql-814"><span class="linenos">814</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">Array</span><span class="p">):</span>
+</span><span id="DuckDB.Generator.bracket_sql-815"><a href="#DuckDB.Generator.bracket_sql-815"><span class="linenos">815</span></a> <span class="n">this</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">paren</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
+</span><span id="DuckDB.Generator.bracket_sql-816"><a href="#DuckDB.Generator.bracket_sql-816"><span class="linenos">816</span></a>
+</span><span id="DuckDB.Generator.bracket_sql-817"><a href="#DuckDB.Generator.bracket_sql-817"><span class="linenos">817</span></a> <span class="n">bracket</span> <span class="o">=</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="DuckDB.Generator.bracket_sql-818"><a href="#DuckDB.Generator.bracket_sql-818"><span class="linenos">818</span></a>
+</span><span id="DuckDB.Generator.bracket_sql-819"><a href="#DuckDB.Generator.bracket_sql-819"><span class="linenos">819</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;returns_list_for_maps&quot;</span><span class="p">):</span>
+</span><span id="DuckDB.Generator.bracket_sql-820"><a href="#DuckDB.Generator.bracket_sql-820"><span class="linenos">820</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="DuckDB.Generator.bracket_sql-821"><a href="#DuckDB.Generator.bracket_sql-821"><span class="linenos">821</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="DuckDB.Generator.bracket_sql-822"><a href="#DuckDB.Generator.bracket_sql-822"><span class="linenos">822</span></a>
+</span><span id="DuckDB.Generator.bracket_sql-823"><a href="#DuckDB.Generator.bracket_sql-823"><span class="linenos">823</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.bracket_sql-824"><a href="#DuckDB.Generator.bracket_sql-824"><span class="linenos">824</span></a>
+</span><span id="DuckDB.Generator.bracket_sql-825"><a href="#DuckDB.Generator.bracket_sql-825"><span class="linenos">825</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">):</span>
+</span><span id="DuckDB.Generator.bracket_sql-826"><a href="#DuckDB.Generator.bracket_sql-826"><span class="linenos">826</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]&quot;</span>
</span><span id="DuckDB.Generator.bracket_sql-827"><a href="#DuckDB.Generator.bracket_sql-827"><span class="linenos">827</span></a>
-</span><span id="DuckDB.Generator.bracket_sql-828"><a href="#DuckDB.Generator.bracket_sql-828"><span class="linenos">828</span></a> <span class="k">if</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">MAP</span><span class="p">):</span>
-</span><span id="DuckDB.Generator.bracket_sql-829"><a href="#DuckDB.Generator.bracket_sql-829"><span class="linenos">829</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]&quot;</span>
-</span><span id="DuckDB.Generator.bracket_sql-830"><a href="#DuckDB.Generator.bracket_sql-830"><span class="linenos">830</span></a>
-</span><span id="DuckDB.Generator.bracket_sql-831"><a href="#DuckDB.Generator.bracket_sql-831"><span class="linenos">831</span></a> <span class="k">return</span> <span class="n">bracket</span>
+</span><span id="DuckDB.Generator.bracket_sql-828"><a href="#DuckDB.Generator.bracket_sql-828"><span class="linenos">828</span></a> <span class="k">return</span> <span class="n">bracket</span>
</span></pre></div>
@@ -4301,21 +4289,21 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.withingroup_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.withingroup_sql-833"><a href="#DuckDB.Generator.withingroup_sql-833"><span class="linenos">833</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="DuckDB.Generator.withingroup_sql-834"><a href="#DuckDB.Generator.withingroup_sql-834"><span class="linenos">834</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="DuckDB.Generator.withingroup_sql-835"><a href="#DuckDB.Generator.withingroup_sql-835"><span class="linenos">835</span></a>
-</span><span id="DuckDB.Generator.withingroup_sql-836"><a href="#DuckDB.Generator.withingroup_sql-836"><span class="linenos">836</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="DuckDB.Generator.withingroup_sql-837"><a href="#DuckDB.Generator.withingroup_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">func</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">PERCENTILES</span><span class="p">):</span>
-</span><span id="DuckDB.Generator.withingroup_sql-838"><a href="#DuckDB.Generator.withingroup_sql-838"><span class="linenos">838</span></a> <span class="c1"># Make the order key the first arg and slide the fraction to the right</span>
-</span><span id="DuckDB.Generator.withingroup_sql-839"><a href="#DuckDB.Generator.withingroup_sql-839"><span class="linenos">839</span></a> <span class="c1"># https://duckdb.org/docs/sql/aggregates#ordered-set-aggregate-functions</span>
-</span><span id="DuckDB.Generator.withingroup_sql-840"><a href="#DuckDB.Generator.withingroup_sql-840"><span class="linenos">840</span></a> <span class="n">order_col</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">Ordered</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.withingroup_sql-841"><a href="#DuckDB.Generator.withingroup_sql-841"><span class="linenos">841</span></a> <span class="k">if</span> <span class="n">order_col</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.withingroup_sql-842"><a href="#DuckDB.Generator.withingroup_sql-842"><span class="linenos">842</span></a> <span class="n">func</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">func</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.withingroup_sql-843"><a href="#DuckDB.Generator.withingroup_sql-843"><span class="linenos">843</span></a> <span class="n">func</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">order_col</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.withingroup_sql-844"><a href="#DuckDB.Generator.withingroup_sql-844"><span class="linenos">844</span></a>
-</span><span id="DuckDB.Generator.withingroup_sql-845"><a href="#DuckDB.Generator.withingroup_sql-845"><span class="linenos">845</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span 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="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.withingroup_sql-846"><a href="#DuckDB.Generator.withingroup_sql-846"><span class="linenos">846</span></a>
-</span><span id="DuckDB.Generator.withingroup_sql-847"><a href="#DuckDB.Generator.withingroup_sql-847"><span class="linenos">847</span></a> <span class="k">return</span> <span 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">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.withingroup_sql-830"><a href="#DuckDB.Generator.withingroup_sql-830"><span class="linenos">830</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="DuckDB.Generator.withingroup_sql-831"><a href="#DuckDB.Generator.withingroup_sql-831"><span class="linenos">831</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="DuckDB.Generator.withingroup_sql-832"><a href="#DuckDB.Generator.withingroup_sql-832"><span class="linenos">832</span></a>
+</span><span id="DuckDB.Generator.withingroup_sql-833"><a href="#DuckDB.Generator.withingroup_sql-833"><span class="linenos">833</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="DuckDB.Generator.withingroup_sql-834"><a href="#DuckDB.Generator.withingroup_sql-834"><span class="linenos">834</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">PERCENTILES</span><span class="p">):</span>
+</span><span id="DuckDB.Generator.withingroup_sql-835"><a href="#DuckDB.Generator.withingroup_sql-835"><span class="linenos">835</span></a> <span class="c1"># Make the order key the first arg and slide the fraction to the right</span>
+</span><span id="DuckDB.Generator.withingroup_sql-836"><a href="#DuckDB.Generator.withingroup_sql-836"><span class="linenos">836</span></a> <span class="c1"># https://duckdb.org/docs/sql/aggregates#ordered-set-aggregate-functions</span>
+</span><span id="DuckDB.Generator.withingroup_sql-837"><a href="#DuckDB.Generator.withingroup_sql-837"><span class="linenos">837</span></a> <span class="n">order_col</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">Ordered</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.withingroup_sql-838"><a href="#DuckDB.Generator.withingroup_sql-838"><span class="linenos">838</span></a> <span class="k">if</span> <span class="n">order_col</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.withingroup_sql-839"><a href="#DuckDB.Generator.withingroup_sql-839"><span class="linenos">839</span></a> <span class="n">func</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">func</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.withingroup_sql-840"><a href="#DuckDB.Generator.withingroup_sql-840"><span class="linenos">840</span></a> <span class="n">func</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">order_col</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.withingroup_sql-841"><a href="#DuckDB.Generator.withingroup_sql-841"><span class="linenos">841</span></a>
+</span><span id="DuckDB.Generator.withingroup_sql-842"><a href="#DuckDB.Generator.withingroup_sql-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 class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.withingroup_sql-843"><a href="#DuckDB.Generator.withingroup_sql-843"><span class="linenos">843</span></a>
+</span><span id="DuckDB.Generator.withingroup_sql-844"><a href="#DuckDB.Generator.withingroup_sql-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="n">this</span><span class="si">}{</span><span class="n">expression_sql</span><span class="si">}</span><span class="s2">)&quot;</span>
</span></pre></div>
@@ -4333,35 +4321,35 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.length_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.length_sql-849"><a href="#DuckDB.Generator.length_sql-849"><span class="linenos">849</span></a> <span class="k">def</span> <span class="nf">length_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.length_sql-850"><a href="#DuckDB.Generator.length_sql-850"><span class="linenos">850</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
-</span><span id="DuckDB.Generator.length_sql-851"><a href="#DuckDB.Generator.length_sql-851"><span class="linenos">851</span></a>
-</span><span id="DuckDB.Generator.length_sql-852"><a href="#DuckDB.Generator.length_sql-852"><span class="linenos">852</span></a> <span class="c1"># Dialects like BQ and Snowflake also accept binary values as args, so</span>
-</span><span id="DuckDB.Generator.length_sql-853"><a href="#DuckDB.Generator.length_sql-853"><span class="linenos">853</span></a> <span class="c1"># DDB will attempt to infer the type or resort to case/when resolution</span>
-</span><span id="DuckDB.Generator.length_sql-854"><a href="#DuckDB.Generator.length_sql-854"><span class="linenos">854</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;binary&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.length_sql-855"><a href="#DuckDB.Generator.length_sql-855"><span class="linenos">855</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.length_sql-846"><a href="#DuckDB.Generator.length_sql-846"><span class="linenos">846</span></a> <span class="k">def</span> <span class="nf">length_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.length_sql-847"><a href="#DuckDB.Generator.length_sql-847"><span class="linenos">847</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span>
+</span><span id="DuckDB.Generator.length_sql-848"><a href="#DuckDB.Generator.length_sql-848"><span class="linenos">848</span></a>
+</span><span id="DuckDB.Generator.length_sql-849"><a href="#DuckDB.Generator.length_sql-849"><span class="linenos">849</span></a> <span class="c1"># Dialects like BQ and Snowflake also accept binary values as args, so</span>
+</span><span id="DuckDB.Generator.length_sql-850"><a href="#DuckDB.Generator.length_sql-850"><span class="linenos">850</span></a> <span class="c1"># DDB will attempt to infer the type or resort to case/when resolution</span>
+</span><span id="DuckDB.Generator.length_sql-851"><a href="#DuckDB.Generator.length_sql-851"><span class="linenos">851</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;binary&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.length_sql-852"><a href="#DuckDB.Generator.length_sql-852"><span class="linenos">852</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.length_sql-853"><a href="#DuckDB.Generator.length_sql-853"><span class="linenos">853</span></a>
+</span><span id="DuckDB.Generator.length_sql-854"><a href="#DuckDB.Generator.length_sql-854"><span class="linenos">854</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">arg</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.length_sql-855"><a href="#DuckDB.Generator.length_sql-855"><span class="linenos">855</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="DuckDB.Generator.length_sql-856"><a href="#DuckDB.Generator.length_sql-856"><span class="linenos">856</span></a>
-</span><span id="DuckDB.Generator.length_sql-857"><a href="#DuckDB.Generator.length_sql-857"><span class="linenos">857</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">arg</span><span class="o">.</span><span class="n">type</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.length_sql-858"><a href="#DuckDB.Generator.length_sql-858"><span class="linenos">858</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="DuckDB.Generator.length_sql-859"><a href="#DuckDB.Generator.length_sql-859"><span class="linenos">859</span></a>
-</span><span id="DuckDB.Generator.length_sql-860"><a href="#DuckDB.Generator.length_sql-860"><span class="linenos">860</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.length_sql-857"><a href="#DuckDB.Generator.length_sql-857"><span class="linenos">857</span></a> <span class="n">arg</span> <span class="o">=</span> <span class="n">annotate_types</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.length_sql-858"><a href="#DuckDB.Generator.length_sql-858"><span class="linenos">858</span></a>
+</span><span id="DuckDB.Generator.length_sql-859"><a href="#DuckDB.Generator.length_sql-859"><span class="linenos">859</span></a> <span class="k">if</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="o">*</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span><span class="p">):</span>
+</span><span id="DuckDB.Generator.length_sql-860"><a href="#DuckDB.Generator.length_sql-860"><span class="linenos">860</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
</span><span id="DuckDB.Generator.length_sql-861"><a href="#DuckDB.Generator.length_sql-861"><span class="linenos">861</span></a>
-</span><span id="DuckDB.Generator.length_sql-862"><a href="#DuckDB.Generator.length_sql-862"><span class="linenos">862</span></a> <span class="k">if</span> <span class="n">arg</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="o">*</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEXT_TYPES</span><span class="p">):</span>
-</span><span id="DuckDB.Generator.length_sql-863"><a href="#DuckDB.Generator.length_sql-863"><span class="linenos">863</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.length_sql-864"><a href="#DuckDB.Generator.length_sql-864"><span class="linenos">864</span></a>
-</span><span id="DuckDB.Generator.length_sql-865"><a href="#DuckDB.Generator.length_sql-865"><span class="linenos">865</span></a> <span class="c1"># We need these casts to make duckdb&#39;s static type checker happy</span>
-</span><span id="DuckDB.Generator.length_sql-866"><a href="#DuckDB.Generator.length_sql-866"><span class="linenos">866</span></a> <span class="n">blob</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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><span id="DuckDB.Generator.length_sql-867"><a href="#DuckDB.Generator.length_sql-867"><span class="linenos">867</span></a> <span class="n">varchar</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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="DuckDB.Generator.length_sql-868"><a href="#DuckDB.Generator.length_sql-868"><span class="linenos">868</span></a>
-</span><span id="DuckDB.Generator.length_sql-869"><a href="#DuckDB.Generator.length_sql-869"><span class="linenos">869</span></a> <span class="n">case</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="DuckDB.Generator.length_sql-870"><a href="#DuckDB.Generator.length_sql-870"><span class="linenos">870</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">case</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;TYPEOF&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">))</span>
-</span><span id="DuckDB.Generator.length_sql-871"><a href="#DuckDB.Generator.length_sql-871"><span class="linenos">871</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span>
-</span><span id="DuckDB.Generator.length_sql-872"><a href="#DuckDB.Generator.length_sql-872"><span class="linenos">872</span></a> <span class="s2">&quot;&#39;VARCHAR&#39;&quot;</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;LENGTH&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">varchar</span><span class="p">])</span>
-</span><span id="DuckDB.Generator.length_sql-873"><a href="#DuckDB.Generator.length_sql-873"><span class="linenos">873</span></a> <span class="p">)</span> <span class="c1"># anonymous to break length_sql recursion</span>
-</span><span id="DuckDB.Generator.length_sql-874"><a href="#DuckDB.Generator.length_sql-874"><span class="linenos">874</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="s2">&quot;&#39;BLOB&#39;&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;OCTET_LENGTH&quot;</span><span class="p">,</span> <span class="n">blob</span><span class="p">))</span>
-</span><span id="DuckDB.Generator.length_sql-875"><a href="#DuckDB.Generator.length_sql-875"><span class="linenos">875</span></a> <span class="p">)</span>
-</span><span id="DuckDB.Generator.length_sql-876"><a href="#DuckDB.Generator.length_sql-876"><span class="linenos">876</span></a>
-</span><span id="DuckDB.Generator.length_sql-877"><a href="#DuckDB.Generator.length_sql-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">case</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.length_sql-862"><a href="#DuckDB.Generator.length_sql-862"><span class="linenos">862</span></a> <span class="c1"># We need these casts to make duckdb&#39;s static type checker happy</span>
+</span><span id="DuckDB.Generator.length_sql-863"><a href="#DuckDB.Generator.length_sql-863"><span class="linenos">863</span></a> <span class="n">blob</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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><span id="DuckDB.Generator.length_sql-864"><a href="#DuckDB.Generator.length_sql-864"><span class="linenos">864</span></a> <span class="n">varchar</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">arg</span><span class="p">,</span> <span class="n">exp</span><span 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="DuckDB.Generator.length_sql-865"><a href="#DuckDB.Generator.length_sql-865"><span class="linenos">865</span></a>
+</span><span id="DuckDB.Generator.length_sql-866"><a href="#DuckDB.Generator.length_sql-866"><span class="linenos">866</span></a> <span class="n">case</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="DuckDB.Generator.length_sql-867"><a href="#DuckDB.Generator.length_sql-867"><span class="linenos">867</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">case</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;TYPEOF&quot;</span><span class="p">,</span> <span class="n">arg</span><span class="p">))</span>
+</span><span id="DuckDB.Generator.length_sql-868"><a href="#DuckDB.Generator.length_sql-868"><span class="linenos">868</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span>
+</span><span id="DuckDB.Generator.length_sql-869"><a href="#DuckDB.Generator.length_sql-869"><span class="linenos">869</span></a> <span class="s2">&quot;&#39;VARCHAR&#39;&quot;</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;LENGTH&quot;</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">varchar</span><span class="p">])</span>
+</span><span id="DuckDB.Generator.length_sql-870"><a href="#DuckDB.Generator.length_sql-870"><span class="linenos">870</span></a> <span class="p">)</span> <span class="c1"># anonymous to break length_sql recursion</span>
+</span><span id="DuckDB.Generator.length_sql-871"><a href="#DuckDB.Generator.length_sql-871"><span class="linenos">871</span></a> <span class="o">.</span><span class="n">when</span><span class="p">(</span><span class="s2">&quot;&#39;BLOB&#39;&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;OCTET_LENGTH&quot;</span><span class="p">,</span> <span class="n">blob</span><span class="p">))</span>
+</span><span id="DuckDB.Generator.length_sql-872"><a href="#DuckDB.Generator.length_sql-872"><span class="linenos">872</span></a> <span class="p">)</span>
+</span><span id="DuckDB.Generator.length_sql-873"><a href="#DuckDB.Generator.length_sql-873"><span class="linenos">873</span></a>
+</span><span id="DuckDB.Generator.length_sql-874"><a href="#DuckDB.Generator.length_sql-874"><span class="linenos">874</span></a> <span 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>
@@ -4379,20 +4367,20 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.objectinsert_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.objectinsert_sql-879"><a href="#DuckDB.Generator.objectinsert_sql-879"><span class="linenos">879</span></a> <span class="k">def</span> <span class="nf">objectinsert_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ObjectInsert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.objectinsert_sql-880"><a href="#DuckDB.Generator.objectinsert_sql-880"><span class="linenos">880</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="DuckDB.Generator.objectinsert_sql-881"><a href="#DuckDB.Generator.objectinsert_sql-881"><span class="linenos">881</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;key&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.objectinsert_sql-882"><a href="#DuckDB.Generator.objectinsert_sql-882"><span class="linenos">882</span></a> <span class="n">key_sql</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">key</span><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="DuckDB.Generator.objectinsert_sql-883"><a href="#DuckDB.Generator.objectinsert_sql-883"><span class="linenos">883</span></a> <span class="n">value_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.objectinsert_sql-884"><a href="#DuckDB.Generator.objectinsert_sql-884"><span class="linenos">884</span></a>
-</span><span id="DuckDB.Generator.objectinsert_sql-885"><a href="#DuckDB.Generator.objectinsert_sql-885"><span class="linenos">885</span></a> <span class="n">kv_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">key_sql</span><span class="si">}</span><span class="s2"> := </span><span class="si">{</span><span class="n">value_sql</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="DuckDB.Generator.objectinsert_sql-886"><a href="#DuckDB.Generator.objectinsert_sql-886"><span class="linenos">886</span></a>
-</span><span id="DuckDB.Generator.objectinsert_sql-887"><a href="#DuckDB.Generator.objectinsert_sql-887"><span class="linenos">887</span></a> <span class="c1"># If the input struct is empty e.g. transpiling OBJECT_INSERT(OBJECT_CONSTRUCT(), key, value) from Snowflake</span>
-</span><span id="DuckDB.Generator.objectinsert_sql-888"><a href="#DuckDB.Generator.objectinsert_sql-888"><span class="linenos">888</span></a> <span class="c1"># then we can generate STRUCT_PACK which will build it since STRUCT_INSERT({}, key := value) is not valid DuckDB</span>
-</span><span id="DuckDB.Generator.objectinsert_sql-889"><a href="#DuckDB.Generator.objectinsert_sql-889"><span class="linenos">889</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">Struct</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">expressions</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.objectinsert_sql-890"><a href="#DuckDB.Generator.objectinsert_sql-890"><span class="linenos">890</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_PACK&quot;</span><span class="p">,</span> <span class="n">kv_sql</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.objectinsert_sql-891"><a href="#DuckDB.Generator.objectinsert_sql-891"><span class="linenos">891</span></a>
-</span><span id="DuckDB.Generator.objectinsert_sql-892"><a href="#DuckDB.Generator.objectinsert_sql-892"><span class="linenos">892</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_INSERT&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">kv_sql</span><span class="p">)</span>
+ <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.objectinsert_sql-876"><a href="#DuckDB.Generator.objectinsert_sql-876"><span class="linenos">876</span></a> <span class="k">def</span> <span class="nf">objectinsert_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ObjectInsert</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.objectinsert_sql-877"><a href="#DuckDB.Generator.objectinsert_sql-877"><span class="linenos">877</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="DuckDB.Generator.objectinsert_sql-878"><a href="#DuckDB.Generator.objectinsert_sql-878"><span class="linenos">878</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;key&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.objectinsert_sql-879"><a href="#DuckDB.Generator.objectinsert_sql-879"><span class="linenos">879</span></a> <span class="n">key_sql</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">name</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">key</span><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="DuckDB.Generator.objectinsert_sql-880"><a href="#DuckDB.Generator.objectinsert_sql-880"><span class="linenos">880</span></a> <span class="n">value_sql</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.objectinsert_sql-881"><a href="#DuckDB.Generator.objectinsert_sql-881"><span class="linenos">881</span></a>
+</span><span id="DuckDB.Generator.objectinsert_sql-882"><a href="#DuckDB.Generator.objectinsert_sql-882"><span class="linenos">882</span></a> <span class="n">kv_sql</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">key_sql</span><span class="si">}</span><span class="s2"> := </span><span class="si">{</span><span class="n">value_sql</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="DuckDB.Generator.objectinsert_sql-883"><a href="#DuckDB.Generator.objectinsert_sql-883"><span class="linenos">883</span></a>
+</span><span id="DuckDB.Generator.objectinsert_sql-884"><a href="#DuckDB.Generator.objectinsert_sql-884"><span class="linenos">884</span></a> <span class="c1"># If the input struct is empty e.g. transpiling OBJECT_INSERT(OBJECT_CONSTRUCT(), key, value) from Snowflake</span>
+</span><span id="DuckDB.Generator.objectinsert_sql-885"><a href="#DuckDB.Generator.objectinsert_sql-885"><span class="linenos">885</span></a> <span class="c1"># then we can generate STRUCT_PACK which will build it since STRUCT_INSERT({}, key := value) is not valid DuckDB</span>
+</span><span id="DuckDB.Generator.objectinsert_sql-886"><a href="#DuckDB.Generator.objectinsert_sql-886"><span class="linenos">886</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">Struct</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">expressions</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.objectinsert_sql-887"><a href="#DuckDB.Generator.objectinsert_sql-887"><span class="linenos">887</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_PACK&quot;</span><span class="p">,</span> <span class="n">kv_sql</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.objectinsert_sql-888"><a href="#DuckDB.Generator.objectinsert_sql-888"><span class="linenos">888</span></a>
+</span><span id="DuckDB.Generator.objectinsert_sql-889"><a href="#DuckDB.Generator.objectinsert_sql-889"><span class="linenos">889</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;STRUCT_INSERT&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">kv_sql</span><span class="p">)</span>
</span></pre></div>
@@ -4410,26 +4398,26 @@ Default: True</li>
</div>
<a class="headerlink" href="#DuckDB.Generator.unnest_sql"></a>
- <div class="pdoc-code codehilite"><pre><span></span><span id="DuckDB.Generator.unnest_sql-894"><a href="#DuckDB.Generator.unnest_sql-894"><span class="linenos">894</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="DuckDB.Generator.unnest_sql-895"><a href="#DuckDB.Generator.unnest_sql-895"><span class="linenos">895</span></a> <span class="n">explode_array</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;explode_array&quot;</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.unnest_sql-896"><a href="#DuckDB.Generator.unnest_sql-896"><span class="linenos">896</span></a> <span class="k">if</span> <span class="n">explode_array</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.unnest_sql-897"><a href="#DuckDB.Generator.unnest_sql-897"><span class="linenos">897</span></a> <span class="c1"># In BigQuery, UNNESTing a nested array leads to explosion of the top-level array &amp; struct</span>
-</span><span id="DuckDB.Generator.unnest_sql-898"><a href="#DuckDB.Generator.unnest_sql-898"><span class="linenos">898</span></a> <span class="c1"># This is transpiled to DDB by transforming &quot;FROM UNNEST(...)&quot; to &quot;FROM (SELECT UNNEST(..., max_depth =&gt; 2))&quot;</span>
-</span><span id="DuckDB.Generator.unnest_sql-899"><a href="#DuckDB.Generator.unnest_sql-899"><span class="linenos">899</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="DuckDB.Generator.unnest_sql-900"><a href="#DuckDB.Generator.unnest_sql-900"><span class="linenos">900</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">(</span><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="s2">&quot;max_depth&quot;</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="DuckDB.Generator.unnest_sql-901"><a href="#DuckDB.Generator.unnest_sql-901"><span class="linenos">901</span></a> <span class="p">)</span>
-</span><span id="DuckDB.Generator.unnest_sql-902"><a href="#DuckDB.Generator.unnest_sql-902"><span class="linenos">902</span></a>
-</span><span id="DuckDB.Generator.unnest_sql-903"><a href="#DuckDB.Generator.unnest_sql-903"><span class="linenos">903</span></a> <span class="c1"># If BQ&#39;s UNNEST is aliased, we transform it from a column alias to a table alias in DDB</span>
-</span><span id="DuckDB.Generator.unnest_sql-904"><a href="#DuckDB.Generator.unnest_sql-904"><span class="linenos">904</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="DuckDB.Generator.unnest_sql-905"><a href="#DuckDB.Generator.unnest_sql-905"><span class="linenos">905</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="DuckDB.Generator.unnest_sql-906"><a href="#DuckDB.Generator.unnest_sql-906"><span class="linenos">906</span></a> <span class="n">expression</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="DuckDB.Generator.unnest_sql-907"><a href="#DuckDB.Generator.unnest_sql-907"><span class="linenos">907</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">seq_get</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">),</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="DuckDB.Generator.unnest_sql-908"><a href="#DuckDB.Generator.unnest_sql-908"><span class="linenos">908</span></a>
-</span><span id="DuckDB.Generator.unnest_sql-909"><a href="#DuckDB.Generator.unnest_sql-909"><span class="linenos">909</span></a> <span class="n">unnest_sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.unnest_sql-910"><a href="#DuckDB.Generator.unnest_sql-910"><span class="linenos">910</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">unnest_sql</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="DuckDB.Generator.unnest_sql-911"><a href="#DuckDB.Generator.unnest_sql-911"><span class="linenos">911</span></a> <span 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">select</span><span class="p">)</span>
-</span><span id="DuckDB.Generator.unnest_sql-912"><a href="#DuckDB.Generator.unnest_sql-912"><span class="linenos">912</span></a>
-</span><span id="DuckDB.Generator.unnest_sql-913"><a href="#DuckDB.Generator.unnest_sql-913"><span class="linenos">913</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_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.unnest_sql-891"><a href="#DuckDB.Generator.unnest_sql-891"><span class="linenos">891</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="DuckDB.Generator.unnest_sql-892"><a href="#DuckDB.Generator.unnest_sql-892"><span class="linenos">892</span></a> <span class="n">explode_array</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;explode_array&quot;</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.unnest_sql-893"><a href="#DuckDB.Generator.unnest_sql-893"><span class="linenos">893</span></a> <span class="k">if</span> <span class="n">explode_array</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.unnest_sql-894"><a href="#DuckDB.Generator.unnest_sql-894"><span class="linenos">894</span></a> <span class="c1"># In BigQuery, UNNESTing a nested array leads to explosion of the top-level array &amp; struct</span>
+</span><span id="DuckDB.Generator.unnest_sql-895"><a href="#DuckDB.Generator.unnest_sql-895"><span class="linenos">895</span></a> <span class="c1"># This is transpiled to DDB by transforming &quot;FROM UNNEST(...)&quot; to &quot;FROM (SELECT UNNEST(..., max_depth =&gt; 2))&quot;</span>
+</span><span id="DuckDB.Generator.unnest_sql-896"><a href="#DuckDB.Generator.unnest_sql-896"><span class="linenos">896</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="DuckDB.Generator.unnest_sql-897"><a href="#DuckDB.Generator.unnest_sql-897"><span class="linenos">897</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Kwarg</span><span class="p">(</span><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="s2">&quot;max_depth&quot;</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="DuckDB.Generator.unnest_sql-898"><a href="#DuckDB.Generator.unnest_sql-898"><span class="linenos">898</span></a> <span class="p">)</span>
+</span><span id="DuckDB.Generator.unnest_sql-899"><a href="#DuckDB.Generator.unnest_sql-899"><span class="linenos">899</span></a>
+</span><span id="DuckDB.Generator.unnest_sql-900"><a href="#DuckDB.Generator.unnest_sql-900"><span class="linenos">900</span></a> <span class="c1"># If BQ&#39;s UNNEST is aliased, we transform it from a column alias to a table alias in DDB</span>
+</span><span id="DuckDB.Generator.unnest_sql-901"><a href="#DuckDB.Generator.unnest_sql-901"><span class="linenos">901</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="DuckDB.Generator.unnest_sql-902"><a href="#DuckDB.Generator.unnest_sql-902"><span class="linenos">902</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="DuckDB.Generator.unnest_sql-903"><a href="#DuckDB.Generator.unnest_sql-903"><span class="linenos">903</span></a> <span class="n">expression</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="DuckDB.Generator.unnest_sql-904"><a href="#DuckDB.Generator.unnest_sql-904"><span class="linenos">904</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">seq_get</span><span class="p">(</span><span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">),</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="DuckDB.Generator.unnest_sql-905"><a href="#DuckDB.Generator.unnest_sql-905"><span class="linenos">905</span></a>
+</span><span id="DuckDB.Generator.unnest_sql-906"><a href="#DuckDB.Generator.unnest_sql-906"><span class="linenos">906</span></a> <span class="n">unnest_sql</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.unnest_sql-907"><a href="#DuckDB.Generator.unnest_sql-907"><span class="linenos">907</span></a> <span class="n">select</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">unnest_sql</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="DuckDB.Generator.unnest_sql-908"><a href="#DuckDB.Generator.unnest_sql-908"><span class="linenos">908</span></a> <span 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">select</span><span class="p">)</span>
+</span><span id="DuckDB.Generator.unnest_sql-909"><a href="#DuckDB.Generator.unnest_sql-909"><span class="linenos">909</span></a>
+</span><span id="DuckDB.Generator.unnest_sql-910"><a href="#DuckDB.Generator.unnest_sql-910"><span class="linenos">910</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">unnest_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>