diff options
Diffstat (limited to 'docs/sqlglot/dialects/duckdb.html')
-rw-r--r-- | docs/sqlglot/dialects/duckdb.html | 1196 |
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">" AS "</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">-></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">"TABLESAMPLE"</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">"size"</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">"method"</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">"RESERVOIR"</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">"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, "</span> -</span><span id="L-768"><a href="#L-768"><span class="linenos">768</span></a> <span class="s2">"defaulting to reservoir sampling"</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">"method"</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">"RESERVOIR"</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">-></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">"unit"</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">"week"</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">"quarter"</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">-></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">"TABLESAMPLE"</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">"size"</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">"method"</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">"RESERVOIR"</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">"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, "</span> +</span><span id="L-767"><a href="#L-767"><span class="linenos">767</span></a> <span class="s2">"defaulting to reservoir sampling"</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">"method"</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">"RESERVOIR"</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">-></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">"unit"</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">"week"</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">"quarter"</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">"(</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">'DAY'</span><span class="p">)))</span><span class="si">}</span><span class="s2">)"</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">"(</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">'DAY'</span><span class="p">)))</span><span class="si">}</span><span class="s2">)"</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">" "</span><span class="p">)</span> <span class="o">-></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">"this"</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">-></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">"LEFT"</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">"on"</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'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">-></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) -> [a, b], RANGE(a, b) -> [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">"is_end_exclusive"</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">"RANGE"</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">-></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">"returns_list_for_maps"</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">" "</span><span class="p">)</span> <span class="o">-></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">"this"</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">-></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">"LEFT"</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">"on"</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'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">-></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) -> [a, b], RANGE(a, b) -> [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">"is_end_exclusive"</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">"RANGE"</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">-></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">"returns_list_for_maps"</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">"(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]"</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">"(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]"</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">-></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">"expression"</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">-></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">"expression"</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">"expression"</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">"this"</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">"this"</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">")"</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">"</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">)"</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">"expression"</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">"this"</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">"this"</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">")"</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">"</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">)"</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">-></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">-></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">"binary"</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">"LENGTH"</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">"binary"</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">"LENGTH"</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">"LENGTH"</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">"LENGTH"</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'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">"TYPEOF"</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">"'VARCHAR'"</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">"LENGTH"</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">"'BLOB'"</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">"OCTET_LENGTH"</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">-></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">"key"</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">""</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">"value"</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">"</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">"</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">"STRUCT_PACK"</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">"STRUCT_INSERT"</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">-></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">"explode_array"</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 & 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 "FROM UNNEST(...)" to "FROM (SELECT UNNEST(..., max_depth => 2))"</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">"max_depth"</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'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">"alias"</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">"alias"</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">"columns"</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'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">"TYPEOF"</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">"'VARCHAR'"</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">"LENGTH"</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">"'BLOB'"</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">"OCTET_LENGTH"</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">-></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">"key"</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">""</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">"value"</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">"</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">"</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">"STRUCT_PACK"</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">"STRUCT_INSERT"</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">-></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">"explode_array"</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 & 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 "FROM UNNEST(...)" to "FROM (SELECT UNNEST(..., max_depth => 2))"</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">"max_depth"</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'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">"alias"</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">"alias"</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">"columns"</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">" AS "</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">-></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">"TABLESAMPLE"</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">"size"</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">"method"</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">"RESERVOIR"</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">"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, "</span> -</span><span id="DuckDB-769"><a href="#DuckDB-769"><span class="linenos">769</span></a> <span class="s2">"defaulting to reservoir sampling"</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">"method"</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">"RESERVOIR"</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">-></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">"unit"</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">"week"</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">"quarter"</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">-></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">"TABLESAMPLE"</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">"size"</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">"method"</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">"RESERVOIR"</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">"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, "</span> +</span><span id="DuckDB-768"><a href="#DuckDB-768"><span class="linenos">768</span></a> <span class="s2">"defaulting to reservoir sampling"</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">"method"</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">"RESERVOIR"</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">-></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">"unit"</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">"week"</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">"quarter"</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">"(</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">'DAY'</span><span class="p">)))</span><span class="si">}</span><span class="s2">)"</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">"(</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">'DAY'</span><span class="p">)))</span><span class="si">}</span><span class="s2">)"</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">" "</span><span class="p">)</span> <span class="o">-></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">"this"</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">-></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">"LEFT"</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">"on"</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'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">-></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) -> [a, b], RANGE(a, b) -> [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">"is_end_exclusive"</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">"RANGE"</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">-></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">"returns_list_for_maps"</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">" "</span><span class="p">)</span> <span class="o">-></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">"this"</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">-></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">"LEFT"</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">"on"</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'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">-></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) -> [a, b], RANGE(a, b) -> [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">"is_end_exclusive"</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">"RANGE"</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">-></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">"returns_list_for_maps"</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">"(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]"</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">"(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]"</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">-></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">"expression"</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">-></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">"expression"</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">"expression"</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">"this"</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">"this"</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">")"</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">"</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">)"</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">"expression"</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">"this"</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">"this"</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">")"</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">"</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">)"</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">-></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">-></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">"binary"</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">"LENGTH"</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">"binary"</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">"LENGTH"</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">"LENGTH"</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">"LENGTH"</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'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">"TYPEOF"</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">"'VARCHAR'"</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">"LENGTH"</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">"'BLOB'"</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">"OCTET_LENGTH"</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">-></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">"key"</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">""</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">"value"</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">"</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">"</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">"STRUCT_PACK"</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">"STRUCT_INSERT"</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">-></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">"explode_array"</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 & 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 "FROM UNNEST(...)" to "FROM (SELECT UNNEST(..., max_depth => 2))"</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">"max_depth"</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'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">"alias"</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">"alias"</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">"columns"</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'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">"TYPEOF"</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">"'VARCHAR'"</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">"LENGTH"</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">"'BLOB'"</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">"OCTET_LENGTH"</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">-></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">"key"</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">""</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">"value"</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">"</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">"</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">"STRUCT_PACK"</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">"STRUCT_INSERT"</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">-></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">"explode_array"</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 & 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 "FROM UNNEST(...)" to "FROM (SELECT UNNEST(..., max_depth => 2))"</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">"max_depth"</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'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">"alias"</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">"alias"</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">"columns"</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">{'STRUCT', 'STRUCT_PACK'}</span> +<span class="default_value">{'STRUCT_PACK', 'STRUCT'}</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">{'ABS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>'>>, 'ADD_MONTHS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#AddMonths">sqlglot.expressions.AddMonths</a>'>>, 'ANONYMOUS_AGG_FUNC': <bound method Func.from_arg_list of <class '<a href="../expressions.html#AnonymousAggFunc">sqlglot.expressions.AnonymousAggFunc</a>'>>, 'ANY_VALUE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>'>>, 'APPROX_DISTINCT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>'>>, 'APPROX_COUNT_DISTINCT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>'>>, 'APPROX_QUANTILE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>'>>, 'APPROX_TOP_K': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ApproxTopK">sqlglot.expressions.ApproxTopK</a>'>>, 'ARG_MAX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>'>>, 'ARGMAX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>'>>, 'MAX_BY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>'>>, 'ARG_MIN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>'>>, 'ARGMIN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>'>>, 'MIN_BY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>'>>, 'ARRAY': <function Parser.<lambda>>, 'ARRAY_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>'>>, 'ARRAY_ALL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>'>>, 'ARRAY_ANY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>'>>, 'ARRAY_CONCAT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>'>>, 'ARRAY_CAT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>'>>, 'ARRAY_CONSTRUCT_COMPACT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayConstructCompact">sqlglot.expressions.ArrayConstructCompact</a>'>>, 'ARRAY_CONTAINS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>'>>, 'ARRAY_HAS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>'>>, 'ARRAY_CONTAINS_ALL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayContainsAll">sqlglot.expressions.ArrayContainsAll</a>'>>, 'ARRAY_HAS_ALL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayContainsAll">sqlglot.expressions.ArrayContainsAll</a>'>>, 'FILTER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>'>>, 'ARRAY_FILTER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>'>>, 'ARRAY_OVERLAPS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>'>>, 'ARRAY_SIZE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>'>>, 'ARRAY_LENGTH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>'>>, 'ARRAY_SORT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>'>>, 'ARRAY_SUM': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>'>>, 'ARRAY_TO_STRING': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayToString">sqlglot.expressions.ArrayToString</a>'>>, 'ARRAY_JOIN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayToString">sqlglot.expressions.ArrayToString</a>'>>, 'ARRAY_UNION_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>'>>, 'ARRAY_UNIQUE_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayUniqueAgg">sqlglot.expressions.ArrayUniqueAgg</a>'>>, 'AVG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>'>>, 'CASE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Case">sqlglot.expressions.Case</a>'>>, 'CAST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>'>>, 'CAST_TO_STR_TYPE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>'>>, 'CBRT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Cbrt">sqlglot.expressions.Cbrt</a>'>>, 'CEIL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>'>>, 'CEILING': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>'>>, 'CHR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Chr">sqlglot.expressions.Chr</a>'>>, 'CHAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Chr">sqlglot.expressions.Chr</a>'>>, 'COALESCE': <function Parser.<lambda>>, 'IFNULL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>'>>, 'NVL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>'>>, 'COLLATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Collate">sqlglot.expressions.Collate</a>'>>, 'COMBINED_AGG_FUNC': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CombinedAggFunc">sqlglot.expressions.CombinedAggFunc</a>'>>, 'COMBINED_PARAMETERIZED_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CombinedParameterizedAgg">sqlglot.expressions.CombinedParameterizedAgg</a>'>>, 'CONCAT': <function Parser.<lambda>>, 'CONCAT_WS': <function Parser.<lambda>>, 'CONNECT_BY_ROOT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ConnectByRoot">sqlglot.expressions.ConnectByRoot</a>'>>, 'CONVERT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Convert">sqlglot.expressions.Convert</a>'>>, 'CONVERT_TIMEZONE': <function build_convert_timezone>, 'CORR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Corr">sqlglot.expressions.Corr</a>'>>, 'COUNT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Count">sqlglot.expressions.Count</a>'>>, 'COUNT_IF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>'>>, 'COUNTIF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>'>>, 'COVAR_POP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CovarPop">sqlglot.expressions.CovarPop</a>'>>, 'COVAR_SAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CovarSamp">sqlglot.expressions.CovarSamp</a>'>>, 'CURRENT_DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>'>>, 'CURRENT_DATETIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>'>>, 'CURRENT_TIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>'>>, 'CURRENT_TIMESTAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>'>>, 'CURRENT_USER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>'>>, 'DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Date">sqlglot.expressions.Date</a>'>>, 'DATE_ADD': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>'>>, 'DATEDIFF': <function _build_date_diff>, 'DATE_DIFF': <function _build_date_diff>, 'DATE_FROM_PARTS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>'>>, 'DATEFROMPARTS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>'>>, 'DATE_STR_TO_DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>'>>, 'DATE_TO_DATE_STR': <function Parser.<lambda>>, 'DATE_TO_DI': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>'>>, 'DATE_TRUNC': <function date_trunc_to_time>, 'DATETIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Datetime">sqlglot.expressions.Datetime</a>'>>, 'DATETIME_ADD': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>'>>, 'DATETIME_DIFF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>'>>, 'DATETIME_SUB': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>'>>, 'DATETIME_TRUNC': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>'>>, 'DAY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Day">sqlglot.expressions.Day</a>'>>, 'DAY_OF_MONTH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>'>>, 'DAYOFMONTH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>'>>, 'DAY_OF_WEEK': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>'>>, 'DAYOFWEEK': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>'>>, 'DAY_OF_YEAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>'>>, 'DAYOFYEAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>'>>, 'DECODE': <function <a href="#DuckDB.Parser">DuckDB.Parser</a>.<lambda>>, 'DI_TO_DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>'>>, 'ENCODE': <function <a href="#DuckDB.Parser">DuckDB.Parser</a>.<lambda>>, 'EXP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>'>>, 'EXPLODE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>'>>, 'EXPLODE_OUTER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ExplodeOuter">sqlglot.expressions.ExplodeOuter</a>'>>, 'EXPLODING_GENERATE_SERIES': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ExplodingGenerateSeries">sqlglot.expressions.ExplodingGenerateSeries</a>'>>, 'EXTRACT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>'>>, 'FIRST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#First">sqlglot.expressions.First</a>'>>, 'FIRST_VALUE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#FirstValue">sqlglot.expressions.FirstValue</a>'>>, 'FLATTEN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Flatten">sqlglot.expressions.Flatten</a>'>>, 'FLOOR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>'>>, 'FROM_BASE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>'>>, 'FROM_BASE64': <bound method Func.from_arg_list of <class '<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>'>>, 'FROM_ISO8601_TIMESTAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#FromISO8601Timestamp">sqlglot.expressions.FromISO8601Timestamp</a>'>>, 'GAP_FILL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#GapFill">sqlglot.expressions.GapFill</a>'>>, 'GENERATE_DATE_ARRAY': <function Parser.<lambda>>, 'GENERATE_SERIES': <function _build_generate_series.<locals>._builder>, 'GENERATE_TIMESTAMP_ARRAY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#GenerateTimestampArray">sqlglot.expressions.GenerateTimestampArray</a>'>>, 'GREATEST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>'>>, 'GROUP_CONCAT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>'>>, 'HEX': <function build_hex>, 'HLL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>'>>, 'IF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#If">sqlglot.expressions.If</a>'>>, 'IIF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#If">sqlglot.expressions.If</a>'>>, 'INITCAP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>'>>, 'IS_INF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#IsInf">sqlglot.expressions.IsInf</a>'>>, 'ISINF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#IsInf">sqlglot.expressions.IsInf</a>'>>, 'IS_NAN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>'>>, 'ISNAN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>'>>, 'J_S_O_N_ARRAY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONArray">sqlglot.expressions.JSONArray</a>'>>, 'J_S_O_N_ARRAY_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONArrayAgg">sqlglot.expressions.JSONArrayAgg</a>'>>, 'JSON_ARRAY_CONTAINS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>'>>, 'JSONB_CONTAINS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>'>>, 'JSONB_EXTRACT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>'>>, 'JSONB_EXTRACT_SCALAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>'>>, 'JSON_EXTRACT': <function build_extract_json_with_path.<locals>._builder>, 'JSON_EXTRACT_SCALAR': <function build_extract_json_with_path.<locals>._builder>, 'JSON_FORMAT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>'>>, 'J_S_O_N_OBJECT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>'>>, 'J_S_O_N_OBJECT_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONObjectAgg">sqlglot.expressions.JSONObjectAgg</a>'>>, 'J_S_O_N_TABLE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONTable">sqlglot.expressions.JSONTable</a>'>>, 'LAG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Lag">sqlglot.expressions.Lag</a>'>>, 'LAST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Last">sqlglot.expressions.Last</a>'>>, 'LAST_DAY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LastDay">sqlglot.expressions.LastDay</a>'>>, 'LAST_DAY_OF_MONTH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LastDay">sqlglot.expressions.LastDay</a>'>>, 'LAST_VALUE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LastValue">sqlglot.expressions.LastValue</a>'>>, 'LEAD': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Lead">sqlglot.expressions.Lead</a>'>>, 'LEAST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Least">sqlglot.expressions.Least</a>'>>, 'LEFT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Left">sqlglot.expressions.Left</a>'>>, 'LENGTH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Length">sqlglot.expressions.Length</a>'>>, 'LEN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Length">sqlglot.expressions.Length</a>'>>, 'LEVENSHTEIN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>'>>, 'LIST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#List">sqlglot.expressions.List</a>'>>, 'LN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>'>>, 'LOG': <function build_logarithm>, 'LOGICAL_AND': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>'>>, 'BOOL_AND': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>'>>, 'BOOLAND_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>'>>, 'LOGICAL_OR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>'>>, 'BOOL_OR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>'>>, 'BOOLOR_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>'>>, 'LOWER': <function build_lower>, 'LCASE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>'>>, 'LOWER_HEX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LowerHex">sqlglot.expressions.LowerHex</a>'>>, 'MD5': <bound method Func.from_arg_list of <class '<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>'>>, 'MD5_DIGEST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>'>>, 'MAP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Map">sqlglot.expressions.Map</a>'>>, 'MAP_FROM_ENTRIES': <bound method Func.from_arg_list of <class '<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>'>>, 'MATCH_AGAINST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>'>>, 'MAX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Max">sqlglot.expressions.Max</a>'>>, 'MIN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Min">sqlglot.expressions.Min</a>'>>, 'MONTH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Month">sqlglot.expressions.Month</a>'>>, 'MONTHS_BETWEEN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>'>>, 'NEXT_VALUE_FOR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>'>>, 'NTH_VALUE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#NthValue">sqlglot.expressions.NthValue</a>'>>, 'NULLIF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Nullif">sqlglot.expressions.Nullif</a>'>>, 'NUMBER_TO_STR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>'>>, 'NVL2': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>'>>, 'OBJECT_INSERT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ObjectInsert">sqlglot.expressions.ObjectInsert</a>'>>, 'OPEN_J_S_O_N': <bound method Func.from_arg_list of <class '<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>'>>, 'PAD': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Pad">sqlglot.expressions.Pad</a>'>>, 'PARAMETERIZED_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>'>>, 'PARSE_JSON': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>'>>, 'JSON_PARSE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>'>>, 'PERCENTILE_CONT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>'>>, 'PERCENTILE_DISC': <bound method Func.from_arg_list of <class '<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>'>>, 'POSEXPLODE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>'>>, 'POSEXPLODE_OUTER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#PosexplodeOuter">sqlglot.expressions.PosexplodeOuter</a>'>>, 'POWER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>'>>, 'POW': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>'>>, 'PREDICT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Predict">sqlglot.expressions.Predict</a>'>>, 'QUANTILE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>'>>, 'QUARTER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Quarter">sqlglot.expressions.Quarter</a>'>>, 'RAND': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>'>>, 'RANDOM': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>'>>, 'RANDN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Randn">sqlglot.expressions.Randn</a>'>>, 'RANGE_N': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>'>>, 'READ_CSV': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>'>>, 'REDUCE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>'>>, 'REGEXP_EXTRACT': <function <a href="#DuckDB.Parser">DuckDB.Parser</a>.<lambda>>, 'REGEXP_I_LIKE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>'>>, 'REGEXP_LIKE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>'>>, 'REGEXP_REPLACE': <function <a href="#DuckDB.Parser">DuckDB.Parser</a>.<lambda>>, 'REGEXP_SPLIT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>'>>, 'REPEAT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>'>>, 'RIGHT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Right">sqlglot.expressions.Right</a>'>>, 'ROUND': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Round">sqlglot.expressions.Round</a>'>>, 'ROW_NUMBER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>'>>, 'SHA': <bound method Func.from_arg_list of <class '<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>'>>, 'SHA1': <bound method Func.from_arg_list of <class '<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>'>>, 'SHA2': <bound method Func.from_arg_list of <class '<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>'>>, 'SAFE_DIVIDE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>'>>, 'SIGN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Sign">sqlglot.expressions.Sign</a>'>>, 'SIGNUM': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Sign">sqlglot.expressions.Sign</a>'>>, 'SORT_ARRAY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>'>>, 'SPLIT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Split">sqlglot.expressions.Split</a>'>>, 'SQRT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>'>>, 'STANDARD_HASH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>'>>, 'STAR_MAP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>'>>, 'STARTS_WITH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>'>>, 'STARTSWITH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>'>>, 'STDDEV': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>'>>, 'STDEV': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>'>>, 'STDDEV_POP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>'>>, 'STDDEV_SAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>'>>, 'STR_POSITION': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>'>>, 'STR_TO_DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>'>>, 'STR_TO_MAP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>'>>, 'STR_TO_TIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>'>>, 'STR_TO_UNIX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>'>>, 'STRING_TO_ARRAY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Split">sqlglot.expressions.Split</a>'>>, 'SPLIT_BY_STRING': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StringToArray">sqlglot.expressions.StringToArray</a>'>>, 'STRUCT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>'>>, 'STRUCT_EXTRACT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>'>>, 'STUFF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>'>>, 'INSERT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>'>>, 'SUBSTRING': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>'>>, 'SUM': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>'>>, 'TIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Time">sqlglot.expressions.Time</a>'>>, 'TIME_ADD': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>'>>, 'TIME_DIFF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>'>>, 'TIME_FROM_PARTS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>'>>, 'TIMEFROMPARTS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>'>>, 'TIME_STR_TO_DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>'>>, 'TIME_STR_TO_TIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>'>>, 'TIME_STR_TO_UNIX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>'>>, 'TIME_SUB': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>'>>, 'TIME_TO_STR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>'>>, 'TIME_TO_TIME_STR': <function Parser.<lambda>>, 'TIME_TO_UNIX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>'>>, 'TIME_TRUNC': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>'>>, 'TIMESTAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Timestamp">sqlglot.expressions.Timestamp</a>'>>, 'TIMESTAMP_ADD': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>'>>, 'TIMESTAMPDIFF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>'>>, 'TIMESTAMP_DIFF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>'>>, 'TIMESTAMP_FROM_PARTS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>'>>, 'TIMESTAMPFROMPARTS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>'>>, 'TIMESTAMP_SUB': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>'>>, 'TIMESTAMP_TRUNC': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>'>>, 'TO_ARRAY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ToArray">sqlglot.expressions.ToArray</a>'>>, 'TO_BASE64': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>'>>, 'TO_CHAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>'>>, 'TO_DAYS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ToDays">sqlglot.expressions.ToDays</a>'>>, 'TO_MAP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ToMap">sqlglot.expressions.ToMap</a>'>>, 'TO_NUMBER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ToNumber">sqlglot.expressions.ToNumber</a>'>>, 'TRANSFORM': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>'>>, 'TRIM': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>'>>, 'TRY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Try">sqlglot.expressions.Try</a>'>>, 'TRY_CAST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>'>>, 'TS_OR_DI_TO_DI': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>'>>, 'TS_OR_DS_ADD': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>'>>, 'TS_OR_DS_DIFF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TsOrDsDiff">sqlglot.expressions.TsOrDsDiff</a>'>>, 'TS_OR_DS_TO_DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>'>>, 'TS_OR_DS_TO_DATE_STR': <function Parser.<lambda>>, 'TS_OR_DS_TO_TIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TsOrDsToTime">sqlglot.expressions.TsOrDsToTime</a>'>>, 'TS_OR_DS_TO_TIMESTAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TsOrDsToTimestamp">sqlglot.expressions.TsOrDsToTimestamp</a>'>>, 'UNHEX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>'>>, 'UNIX_DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#UnixDate">sqlglot.expressions.UnixDate</a>'>>, 'UNIX_TO_STR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>'>>, 'UNIX_TO_TIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>'>>, 'UNIX_TO_TIME_STR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>'>>, 'UNNEST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>'>>, 'UPPER': <function build_upper>, 'UCASE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>'>>, 'VAR_MAP': <function build_var_map>, 'VARIANCE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>'>>, 'VARIANCE_SAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>'>>, 'VAR_SAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>'>>, 'VARIANCE_POP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>'>>, 'VAR_POP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>'>>, 'WEEK': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Week">sqlglot.expressions.Week</a>'>>, 'WEEK_OF_YEAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>'>>, 'WEEKOFYEAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>'>>, 'WHEN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#When">sqlglot.expressions.When</a>'>>, 'X_M_L_TABLE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>'>>, 'XOR': <function binary_from_function.<locals>.<lambda>>, 'YEAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Year">sqlglot.expressions.Year</a>'>>, 'GLOB': <function Parser.<lambda>>, 'JSON_EXTRACT_PATH_TEXT': <function build_extract_json_with_path.<locals>._builder>, 'LIKE': <function build_like>, 'LOG2': <function Parser.<lambda>>, 'LOG10': <function Parser.<lambda>>, 'LPAD': <function Parser.<lambda>>, 'LEFTPAD': <function Parser.<lambda>>, 'MOD': <function build_mod>, 'RPAD': <function Parser.<lambda>>, 'RIGHTPAD': <function Parser.<lambda>>, 'SCOPE_RESOLUTION': <function Parser.<lambda>>, 'TO_HEX': <function build_hex>, 'ARRAY_REVERSE_SORT': <function _build_sort_array_desc>, 'DATETRUNC': <function date_trunc_to_time>, 'EPOCH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>'>>, 'EPOCH_MS': <function <a href="#DuckDB.Parser">DuckDB.Parser</a>.<lambda>>, 'JSON': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>'>>, 'JSON_EXTRACT_PATH': <function build_extract_json_with_path.<locals>._builder>, 'JSON_EXTRACT_STRING': <function build_extract_json_with_path.<locals>._builder>, 'LIST_HAS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>'>>, 'LIST_REVERSE_SORT': <function _build_sort_array_desc>, 'LIST_SORT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>'>>, 'LIST_VALUE': <function <a href="#DuckDB.Parser">DuckDB.Parser</a>.<lambda>>, 'MAKE_TIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>'>>, 'MAKE_TIMESTAMP': <function _build_make_timestamp>, 'MEDIAN': <function <a href="#DuckDB.Parser">DuckDB.Parser</a>.<lambda>>, 'QUANTILE_CONT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>'>>, 'QUANTILE_DISC': <bound method Func.from_arg_list of <class '<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>'>>, 'REGEXP_MATCHES': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>'>>, 'STRFTIME': <function build_formatted_time.<locals>._builder>, 'STRING_SPLIT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Split">sqlglot.expressions.Split</a>'>>, 'STRING_SPLIT_REGEX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>'>>, 'STRPTIME': <function build_formatted_time.<locals>._builder>, 'STRUCT_PACK': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>'>>, 'STR_SPLIT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Split">sqlglot.expressions.Split</a>'>>, 'STR_SPLIT_REGEX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>'>>, 'TO_TIMESTAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>'>>, 'RANGE': <function _build_generate_series.<locals>._builder>}</span> + <label class="view-value-button pdoc-button" for="DuckDB.Parser.FUNCTIONS-view-value"></label><span class="default_value">{'ABS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Abs">sqlglot.expressions.Abs</a>'>>, 'ADD_MONTHS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#AddMonths">sqlglot.expressions.AddMonths</a>'>>, 'ANONYMOUS_AGG_FUNC': <bound method Func.from_arg_list of <class '<a href="../expressions.html#AnonymousAggFunc">sqlglot.expressions.AnonymousAggFunc</a>'>>, 'ANY_VALUE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#AnyValue">sqlglot.expressions.AnyValue</a>'>>, 'APPROX_DISTINCT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>'>>, 'APPROX_COUNT_DISTINCT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ApproxDistinct">sqlglot.expressions.ApproxDistinct</a>'>>, 'APPROX_QUANTILE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ApproxQuantile">sqlglot.expressions.ApproxQuantile</a>'>>, 'APPROX_TOP_K': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ApproxTopK">sqlglot.expressions.ApproxTopK</a>'>>, 'ARG_MAX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>'>>, 'ARGMAX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>'>>, 'MAX_BY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArgMax">sqlglot.expressions.ArgMax</a>'>>, 'ARG_MIN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>'>>, 'ARGMIN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>'>>, 'MIN_BY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArgMin">sqlglot.expressions.ArgMin</a>'>>, 'ARRAY': <function Parser.<lambda>>, 'ARRAY_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayAgg">sqlglot.expressions.ArrayAgg</a>'>>, 'ARRAY_ALL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayAll">sqlglot.expressions.ArrayAll</a>'>>, 'ARRAY_ANY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayAny">sqlglot.expressions.ArrayAny</a>'>>, 'ARRAY_CONCAT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>'>>, 'ARRAY_CAT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayConcat">sqlglot.expressions.ArrayConcat</a>'>>, 'ARRAY_CONSTRUCT_COMPACT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayConstructCompact">sqlglot.expressions.ArrayConstructCompact</a>'>>, 'ARRAY_CONTAINS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>'>>, 'ARRAY_HAS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>'>>, 'ARRAY_CONTAINS_ALL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayContainsAll">sqlglot.expressions.ArrayContainsAll</a>'>>, 'ARRAY_HAS_ALL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayContainsAll">sqlglot.expressions.ArrayContainsAll</a>'>>, 'FILTER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>'>>, 'ARRAY_FILTER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayFilter">sqlglot.expressions.ArrayFilter</a>'>>, 'ARRAY_OVERLAPS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayOverlaps">sqlglot.expressions.ArrayOverlaps</a>'>>, 'ARRAY_SIZE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>'>>, 'ARRAY_LENGTH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArraySize">sqlglot.expressions.ArraySize</a>'>>, 'ARRAY_SORT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>'>>, 'ARRAY_SUM': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArraySum">sqlglot.expressions.ArraySum</a>'>>, 'ARRAY_TO_STRING': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayToString">sqlglot.expressions.ArrayToString</a>'>>, 'ARRAY_JOIN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayToString">sqlglot.expressions.ArrayToString</a>'>>, 'ARRAY_UNION_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayUnionAgg">sqlglot.expressions.ArrayUnionAgg</a>'>>, 'ARRAY_UNIQUE_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayUniqueAgg">sqlglot.expressions.ArrayUniqueAgg</a>'>>, 'AVG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Avg">sqlglot.expressions.Avg</a>'>>, 'CASE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Case">sqlglot.expressions.Case</a>'>>, 'CAST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Cast">sqlglot.expressions.Cast</a>'>>, 'CAST_TO_STR_TYPE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CastToStrType">sqlglot.expressions.CastToStrType</a>'>>, 'CBRT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Cbrt">sqlglot.expressions.Cbrt</a>'>>, 'CEIL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>'>>, 'CEILING': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Ceil">sqlglot.expressions.Ceil</a>'>>, 'CHR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Chr">sqlglot.expressions.Chr</a>'>>, 'CHAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Chr">sqlglot.expressions.Chr</a>'>>, 'COALESCE': <function Parser.<lambda>>, 'IFNULL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>'>>, 'NVL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Coalesce">sqlglot.expressions.Coalesce</a>'>>, 'COLLATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Collate">sqlglot.expressions.Collate</a>'>>, 'COMBINED_AGG_FUNC': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CombinedAggFunc">sqlglot.expressions.CombinedAggFunc</a>'>>, 'COMBINED_PARAMETERIZED_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CombinedParameterizedAgg">sqlglot.expressions.CombinedParameterizedAgg</a>'>>, 'CONCAT': <function Parser.<lambda>>, 'CONCAT_WS': <function Parser.<lambda>>, 'CONNECT_BY_ROOT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ConnectByRoot">sqlglot.expressions.ConnectByRoot</a>'>>, 'CONVERT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Convert">sqlglot.expressions.Convert</a>'>>, 'CONVERT_TIMEZONE': <function build_convert_timezone>, 'CORR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Corr">sqlglot.expressions.Corr</a>'>>, 'COUNT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Count">sqlglot.expressions.Count</a>'>>, 'COUNT_IF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>'>>, 'COUNTIF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CountIf">sqlglot.expressions.CountIf</a>'>>, 'COVAR_POP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CovarPop">sqlglot.expressions.CovarPop</a>'>>, 'COVAR_SAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CovarSamp">sqlglot.expressions.CovarSamp</a>'>>, 'CURRENT_DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CurrentDate">sqlglot.expressions.CurrentDate</a>'>>, 'CURRENT_DATETIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CurrentDatetime">sqlglot.expressions.CurrentDatetime</a>'>>, 'CURRENT_TIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CurrentTime">sqlglot.expressions.CurrentTime</a>'>>, 'CURRENT_TIMESTAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CurrentTimestamp">sqlglot.expressions.CurrentTimestamp</a>'>>, 'CURRENT_USER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#CurrentUser">sqlglot.expressions.CurrentUser</a>'>>, 'DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Date">sqlglot.expressions.Date</a>'>>, 'DATE_ADD': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DateAdd">sqlglot.expressions.DateAdd</a>'>>, 'DATEDIFF': <function _build_date_diff>, 'DATE_DIFF': <function _build_date_diff>, 'DATE_FROM_PARTS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>'>>, 'DATEFROMPARTS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DateFromParts">sqlglot.expressions.DateFromParts</a>'>>, 'DATE_STR_TO_DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DateStrToDate">sqlglot.expressions.DateStrToDate</a>'>>, 'DATE_TO_DATE_STR': <function Parser.<lambda>>, 'DATE_TO_DI': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DateToDi">sqlglot.expressions.DateToDi</a>'>>, 'DATE_TRUNC': <function date_trunc_to_time>, 'DATETIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Datetime">sqlglot.expressions.Datetime</a>'>>, 'DATETIME_ADD': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DatetimeAdd">sqlglot.expressions.DatetimeAdd</a>'>>, 'DATETIME_DIFF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DatetimeDiff">sqlglot.expressions.DatetimeDiff</a>'>>, 'DATETIME_SUB': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DatetimeSub">sqlglot.expressions.DatetimeSub</a>'>>, 'DATETIME_TRUNC': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DatetimeTrunc">sqlglot.expressions.DatetimeTrunc</a>'>>, 'DAY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Day">sqlglot.expressions.Day</a>'>>, 'DAY_OF_MONTH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>'>>, 'DAYOFMONTH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DayOfMonth">sqlglot.expressions.DayOfMonth</a>'>>, 'DAY_OF_WEEK': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>'>>, 'DAYOFWEEK': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DayOfWeek">sqlglot.expressions.DayOfWeek</a>'>>, 'DAY_OF_YEAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>'>>, 'DAYOFYEAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DayOfYear">sqlglot.expressions.DayOfYear</a>'>>, 'DECODE': <function <a href="#DuckDB.Parser">DuckDB.Parser</a>.<lambda>>, 'DI_TO_DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#DiToDate">sqlglot.expressions.DiToDate</a>'>>, 'ENCODE': <function <a href="#DuckDB.Parser">DuckDB.Parser</a>.<lambda>>, 'EXP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Exp">sqlglot.expressions.Exp</a>'>>, 'EXPLODE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>'>>, 'EXPLODE_OUTER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ExplodeOuter">sqlglot.expressions.ExplodeOuter</a>'>>, 'EXPLODING_GENERATE_SERIES': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ExplodingGenerateSeries">sqlglot.expressions.ExplodingGenerateSeries</a>'>>, 'EXTRACT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Extract">sqlglot.expressions.Extract</a>'>>, 'FIRST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#First">sqlglot.expressions.First</a>'>>, 'FIRST_VALUE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#FirstValue">sqlglot.expressions.FirstValue</a>'>>, 'FLATTEN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Flatten">sqlglot.expressions.Flatten</a>'>>, 'FLOOR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Floor">sqlglot.expressions.Floor</a>'>>, 'FROM_BASE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#FromBase">sqlglot.expressions.FromBase</a>'>>, 'FROM_BASE64': <bound method Func.from_arg_list of <class '<a href="../expressions.html#FromBase64">sqlglot.expressions.FromBase64</a>'>>, 'FROM_ISO8601_TIMESTAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#FromISO8601Timestamp">sqlglot.expressions.FromISO8601Timestamp</a>'>>, 'GAP_FILL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#GapFill">sqlglot.expressions.GapFill</a>'>>, 'GENERATE_DATE_ARRAY': <function Parser.<lambda>>, 'GENERATE_SERIES': <function _build_generate_series.<locals>._builder>, 'GENERATE_TIMESTAMP_ARRAY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#GenerateTimestampArray">sqlglot.expressions.GenerateTimestampArray</a>'>>, 'GREATEST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Greatest">sqlglot.expressions.Greatest</a>'>>, 'GROUP_CONCAT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#GroupConcat">sqlglot.expressions.GroupConcat</a>'>>, 'HEX': <function build_hex>, 'HLL': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Hll">sqlglot.expressions.Hll</a>'>>, 'IF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#If">sqlglot.expressions.If</a>'>>, 'IIF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#If">sqlglot.expressions.If</a>'>>, 'INITCAP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Initcap">sqlglot.expressions.Initcap</a>'>>, 'IS_INF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#IsInf">sqlglot.expressions.IsInf</a>'>>, 'ISINF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#IsInf">sqlglot.expressions.IsInf</a>'>>, 'IS_NAN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>'>>, 'ISNAN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#IsNan">sqlglot.expressions.IsNan</a>'>>, 'J_S_O_N_ARRAY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONArray">sqlglot.expressions.JSONArray</a>'>>, 'J_S_O_N_ARRAY_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONArrayAgg">sqlglot.expressions.JSONArrayAgg</a>'>>, 'JSON_ARRAY_CONTAINS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONArrayContains">sqlglot.expressions.JSONArrayContains</a>'>>, 'JSONB_CONTAINS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONBContains">sqlglot.expressions.JSONBContains</a>'>>, 'JSONB_EXTRACT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONBExtract">sqlglot.expressions.JSONBExtract</a>'>>, 'JSONB_EXTRACT_SCALAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONBExtractScalar">sqlglot.expressions.JSONBExtractScalar</a>'>>, 'JSON_EXTRACT': <function build_extract_json_with_path.<locals>._builder>, 'JSON_EXTRACT_SCALAR': <function build_extract_json_with_path.<locals>._builder>, 'JSON_FORMAT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONFormat">sqlglot.expressions.JSONFormat</a>'>>, 'J_S_O_N_OBJECT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONObject">sqlglot.expressions.JSONObject</a>'>>, 'J_S_O_N_OBJECT_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONObjectAgg">sqlglot.expressions.JSONObjectAgg</a>'>>, 'J_S_O_N_TABLE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#JSONTable">sqlglot.expressions.JSONTable</a>'>>, 'LAG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Lag">sqlglot.expressions.Lag</a>'>>, 'LAST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Last">sqlglot.expressions.Last</a>'>>, 'LAST_DAY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LastDay">sqlglot.expressions.LastDay</a>'>>, 'LAST_DAY_OF_MONTH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LastDay">sqlglot.expressions.LastDay</a>'>>, 'LAST_VALUE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LastValue">sqlglot.expressions.LastValue</a>'>>, 'LEAD': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Lead">sqlglot.expressions.Lead</a>'>>, 'LEAST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Least">sqlglot.expressions.Least</a>'>>, 'LEFT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Left">sqlglot.expressions.Left</a>'>>, 'LENGTH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Length">sqlglot.expressions.Length</a>'>>, 'LEN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Length">sqlglot.expressions.Length</a>'>>, 'LEVENSHTEIN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Levenshtein">sqlglot.expressions.Levenshtein</a>'>>, 'LIST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#List">sqlglot.expressions.List</a>'>>, 'LN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Ln">sqlglot.expressions.Ln</a>'>>, 'LOG': <function build_logarithm>, 'LOGICAL_AND': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>'>>, 'BOOL_AND': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>'>>, 'BOOLAND_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LogicalAnd">sqlglot.expressions.LogicalAnd</a>'>>, 'LOGICAL_OR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>'>>, 'BOOL_OR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>'>>, 'BOOLOR_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LogicalOr">sqlglot.expressions.LogicalOr</a>'>>, 'LOWER': <function build_lower>, 'LCASE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Lower">sqlglot.expressions.Lower</a>'>>, 'LOWER_HEX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#LowerHex">sqlglot.expressions.LowerHex</a>'>>, 'MD5': <bound method Func.from_arg_list of <class '<a href="../expressions.html#MD5">sqlglot.expressions.MD5</a>'>>, 'MD5_DIGEST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#MD5Digest">sqlglot.expressions.MD5Digest</a>'>>, 'MAP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Map">sqlglot.expressions.Map</a>'>>, 'MAP_FROM_ENTRIES': <bound method Func.from_arg_list of <class '<a href="../expressions.html#MapFromEntries">sqlglot.expressions.MapFromEntries</a>'>>, 'MATCH_AGAINST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#MatchAgainst">sqlglot.expressions.MatchAgainst</a>'>>, 'MAX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Max">sqlglot.expressions.Max</a>'>>, 'MIN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Min">sqlglot.expressions.Min</a>'>>, 'MONTH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Month">sqlglot.expressions.Month</a>'>>, 'MONTHS_BETWEEN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#MonthsBetween">sqlglot.expressions.MonthsBetween</a>'>>, 'NEXT_VALUE_FOR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#NextValueFor">sqlglot.expressions.NextValueFor</a>'>>, 'NTH_VALUE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#NthValue">sqlglot.expressions.NthValue</a>'>>, 'NULLIF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Nullif">sqlglot.expressions.Nullif</a>'>>, 'NUMBER_TO_STR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#NumberToStr">sqlglot.expressions.NumberToStr</a>'>>, 'NVL2': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Nvl2">sqlglot.expressions.Nvl2</a>'>>, 'OBJECT_INSERT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ObjectInsert">sqlglot.expressions.ObjectInsert</a>'>>, 'OPEN_J_S_O_N': <bound method Func.from_arg_list of <class '<a href="../expressions.html#OpenJSON">sqlglot.expressions.OpenJSON</a>'>>, 'PAD': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Pad">sqlglot.expressions.Pad</a>'>>, 'PARAMETERIZED_AGG': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ParameterizedAgg">sqlglot.expressions.ParameterizedAgg</a>'>>, 'PARSE_JSON': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>'>>, 'JSON_PARSE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>'>>, 'PERCENTILE_CONT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>'>>, 'PERCENTILE_DISC': <bound method Func.from_arg_list of <class '<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>'>>, 'POSEXPLODE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Posexplode">sqlglot.expressions.Posexplode</a>'>>, 'POSEXPLODE_OUTER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#PosexplodeOuter">sqlglot.expressions.PosexplodeOuter</a>'>>, 'POWER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>'>>, 'POW': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Pow">sqlglot.expressions.Pow</a>'>>, 'PREDICT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Predict">sqlglot.expressions.Predict</a>'>>, 'QUANTILE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Quantile">sqlglot.expressions.Quantile</a>'>>, 'QUARTER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Quarter">sqlglot.expressions.Quarter</a>'>>, 'RAND': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>'>>, 'RANDOM': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Rand">sqlglot.expressions.Rand</a>'>>, 'RANDN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Randn">sqlglot.expressions.Randn</a>'>>, 'RANGE_N': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RangeN">sqlglot.expressions.RangeN</a>'>>, 'READ_CSV': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ReadCSV">sqlglot.expressions.ReadCSV</a>'>>, 'REDUCE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Reduce">sqlglot.expressions.Reduce</a>'>>, 'REGEXP_EXTRACT': <function <a href="#DuckDB.Parser">DuckDB.Parser</a>.<lambda>>, 'REGEXP_I_LIKE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RegexpILike">sqlglot.expressions.RegexpILike</a>'>>, 'REGEXP_LIKE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>'>>, 'REGEXP_REPLACE': <function <a href="#DuckDB.Parser">DuckDB.Parser</a>.<lambda>>, 'REGEXP_SPLIT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>'>>, 'REPEAT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Repeat">sqlglot.expressions.Repeat</a>'>>, 'RIGHT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Right">sqlglot.expressions.Right</a>'>>, 'ROUND': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Round">sqlglot.expressions.Round</a>'>>, 'ROW_NUMBER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RowNumber">sqlglot.expressions.RowNumber</a>'>>, 'SHA': <bound method Func.from_arg_list of <class '<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>'>>, 'SHA1': <bound method Func.from_arg_list of <class '<a href="../expressions.html#SHA">sqlglot.expressions.SHA</a>'>>, 'SHA2': <bound method Func.from_arg_list of <class '<a href="../expressions.html#SHA2">sqlglot.expressions.SHA2</a>'>>, 'SAFE_DIVIDE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#SafeDivide">sqlglot.expressions.SafeDivide</a>'>>, 'SIGN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Sign">sqlglot.expressions.Sign</a>'>>, 'SIGNUM': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Sign">sqlglot.expressions.Sign</a>'>>, 'SORT_ARRAY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>'>>, 'SPLIT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Split">sqlglot.expressions.Split</a>'>>, 'SQRT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Sqrt">sqlglot.expressions.Sqrt</a>'>>, 'STANDARD_HASH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StandardHash">sqlglot.expressions.StandardHash</a>'>>, 'STAR_MAP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StarMap">sqlglot.expressions.StarMap</a>'>>, 'STARTS_WITH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>'>>, 'STARTSWITH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StartsWith">sqlglot.expressions.StartsWith</a>'>>, 'STDDEV': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>'>>, 'STDEV': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Stddev">sqlglot.expressions.Stddev</a>'>>, 'STDDEV_POP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StddevPop">sqlglot.expressions.StddevPop</a>'>>, 'STDDEV_SAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StddevSamp">sqlglot.expressions.StddevSamp</a>'>>, 'STR_POSITION': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StrPosition">sqlglot.expressions.StrPosition</a>'>>, 'STR_TO_DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StrToDate">sqlglot.expressions.StrToDate</a>'>>, 'STR_TO_MAP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StrToMap">sqlglot.expressions.StrToMap</a>'>>, 'STR_TO_TIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StrToTime">sqlglot.expressions.StrToTime</a>'>>, 'STR_TO_UNIX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StrToUnix">sqlglot.expressions.StrToUnix</a>'>>, 'STRING_TO_ARRAY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Split">sqlglot.expressions.Split</a>'>>, 'SPLIT_BY_STRING': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StringToArray">sqlglot.expressions.StringToArray</a>'>>, 'STRUCT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>'>>, 'STRUCT_EXTRACT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#StructExtract">sqlglot.expressions.StructExtract</a>'>>, 'STUFF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>'>>, 'INSERT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Stuff">sqlglot.expressions.Stuff</a>'>>, 'SUBSTRING': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Substring">sqlglot.expressions.Substring</a>'>>, 'SUM': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Sum">sqlglot.expressions.Sum</a>'>>, 'TIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Time">sqlglot.expressions.Time</a>'>>, 'TIME_ADD': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeAdd">sqlglot.expressions.TimeAdd</a>'>>, 'TIME_DIFF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeDiff">sqlglot.expressions.TimeDiff</a>'>>, 'TIME_FROM_PARTS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>'>>, 'TIMEFROMPARTS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>'>>, 'TIME_STR_TO_DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeStrToDate">sqlglot.expressions.TimeStrToDate</a>'>>, 'TIME_STR_TO_TIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeStrToTime">sqlglot.expressions.TimeStrToTime</a>'>>, 'TIME_STR_TO_UNIX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeStrToUnix">sqlglot.expressions.TimeStrToUnix</a>'>>, 'TIME_SUB': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeSub">sqlglot.expressions.TimeSub</a>'>>, 'TIME_TO_STR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeToStr">sqlglot.expressions.TimeToStr</a>'>>, 'TIME_TO_TIME_STR': <function Parser.<lambda>>, 'TIME_TO_UNIX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>'>>, 'TIME_TRUNC': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeTrunc">sqlglot.expressions.TimeTrunc</a>'>>, 'TIMESTAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Timestamp">sqlglot.expressions.Timestamp</a>'>>, 'TIMESTAMP_ADD': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimestampAdd">sqlglot.expressions.TimestampAdd</a>'>>, 'TIMESTAMPDIFF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>'>>, 'TIMESTAMP_DIFF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimestampDiff">sqlglot.expressions.TimestampDiff</a>'>>, 'TIMESTAMP_FROM_PARTS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>'>>, 'TIMESTAMPFROMPARTS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimestampFromParts">sqlglot.expressions.TimestampFromParts</a>'>>, 'TIMESTAMP_SUB': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimestampSub">sqlglot.expressions.TimestampSub</a>'>>, 'TIMESTAMP_TRUNC': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimestampTrunc">sqlglot.expressions.TimestampTrunc</a>'>>, 'TO_ARRAY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ToArray">sqlglot.expressions.ToArray</a>'>>, 'TO_BASE64': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ToBase64">sqlglot.expressions.ToBase64</a>'>>, 'TO_CHAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ToChar">sqlglot.expressions.ToChar</a>'>>, 'TO_DAYS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ToDays">sqlglot.expressions.ToDays</a>'>>, 'TO_MAP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ToMap">sqlglot.expressions.ToMap</a>'>>, 'TO_NUMBER': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ToNumber">sqlglot.expressions.ToNumber</a>'>>, 'TRANSFORM': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Transform">sqlglot.expressions.Transform</a>'>>, 'TRIM': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Trim">sqlglot.expressions.Trim</a>'>>, 'TRY': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Try">sqlglot.expressions.Try</a>'>>, 'TRY_CAST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TryCast">sqlglot.expressions.TryCast</a>'>>, 'TS_OR_DI_TO_DI': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TsOrDiToDi">sqlglot.expressions.TsOrDiToDi</a>'>>, 'TS_OR_DS_ADD': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TsOrDsAdd">sqlglot.expressions.TsOrDsAdd</a>'>>, 'TS_OR_DS_DIFF': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TsOrDsDiff">sqlglot.expressions.TsOrDsDiff</a>'>>, 'TS_OR_DS_TO_DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TsOrDsToDate">sqlglot.expressions.TsOrDsToDate</a>'>>, 'TS_OR_DS_TO_DATE_STR': <function Parser.<lambda>>, 'TS_OR_DS_TO_TIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TsOrDsToTime">sqlglot.expressions.TsOrDsToTime</a>'>>, 'TS_OR_DS_TO_TIMESTAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TsOrDsToTimestamp">sqlglot.expressions.TsOrDsToTimestamp</a>'>>, 'UNHEX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Unhex">sqlglot.expressions.Unhex</a>'>>, 'UNIX_DATE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#UnixDate">sqlglot.expressions.UnixDate</a>'>>, 'UNIX_TO_STR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#UnixToStr">sqlglot.expressions.UnixToStr</a>'>>, 'UNIX_TO_TIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>'>>, 'UNIX_TO_TIME_STR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#UnixToTimeStr">sqlglot.expressions.UnixToTimeStr</a>'>>, 'UNNEST': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Explode">sqlglot.expressions.Explode</a>'>>, 'UPPER': <function build_upper>, 'UCASE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Upper">sqlglot.expressions.Upper</a>'>>, 'VAR_MAP': <function build_var_map>, 'VARIANCE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>'>>, 'VARIANCE_SAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>'>>, 'VAR_SAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Variance">sqlglot.expressions.Variance</a>'>>, 'VARIANCE_POP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>'>>, 'VAR_POP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#VariancePop">sqlglot.expressions.VariancePop</a>'>>, 'WEEK': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Week">sqlglot.expressions.Week</a>'>>, 'WEEK_OF_YEAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>'>>, 'WEEKOFYEAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#WeekOfYear">sqlglot.expressions.WeekOfYear</a>'>>, 'WHEN': <bound method Func.from_arg_list of <class '<a href="../expressions.html#When">sqlglot.expressions.When</a>'>>, 'X_M_L_TABLE': <bound method Func.from_arg_list of <class '<a href="../expressions.html#XMLTable">sqlglot.expressions.XMLTable</a>'>>, 'XOR': <function binary_from_function.<locals>.<lambda>>, 'YEAR': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Year">sqlglot.expressions.Year</a>'>>, 'GLOB': <function Parser.<lambda>>, 'JSON_EXTRACT_PATH_TEXT': <function build_extract_json_with_path.<locals>._builder>, 'LIKE': <function build_like>, 'LOG2': <function Parser.<lambda>>, 'LOG10': <function Parser.<lambda>>, 'LPAD': <function Parser.<lambda>>, 'LEFTPAD': <function Parser.<lambda>>, 'LTRIM': <function Parser.<lambda>>, 'MOD': <function build_mod>, 'RIGHTPAD': <function Parser.<lambda>>, 'RPAD': <function Parser.<lambda>>, 'RTRIM': <function Parser.<lambda>>, 'SCOPE_RESOLUTION': <function Parser.<lambda>>, 'TO_HEX': <function build_hex>, 'ARRAY_REVERSE_SORT': <function _build_sort_array_desc>, 'DATETRUNC': <function date_trunc_to_time>, 'EPOCH': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeToUnix">sqlglot.expressions.TimeToUnix</a>'>>, 'EPOCH_MS': <function <a href="#DuckDB.Parser">DuckDB.Parser</a>.<lambda>>, 'JSON': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ParseJSON">sqlglot.expressions.ParseJSON</a>'>>, 'JSON_EXTRACT_PATH': <function build_extract_json_with_path.<locals>._builder>, 'JSON_EXTRACT_STRING': <function build_extract_json_with_path.<locals>._builder>, 'LIST_HAS': <bound method Func.from_arg_list of <class '<a href="../expressions.html#ArrayContains">sqlglot.expressions.ArrayContains</a>'>>, 'LIST_REVERSE_SORT': <function _build_sort_array_desc>, 'LIST_SORT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#SortArray">sqlglot.expressions.SortArray</a>'>>, 'LIST_VALUE': <function <a href="#DuckDB.Parser">DuckDB.Parser</a>.<lambda>>, 'MAKE_TIME': <bound method Func.from_arg_list of <class '<a href="../expressions.html#TimeFromParts">sqlglot.expressions.TimeFromParts</a>'>>, 'MAKE_TIMESTAMP': <function _build_make_timestamp>, 'MEDIAN': <function <a href="#DuckDB.Parser">DuckDB.Parser</a>.<lambda>>, 'QUANTILE_CONT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#PercentileCont">sqlglot.expressions.PercentileCont</a>'>>, 'QUANTILE_DISC': <bound method Func.from_arg_list of <class '<a href="../expressions.html#PercentileDisc">sqlglot.expressions.PercentileDisc</a>'>>, 'REGEXP_MATCHES': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RegexpLike">sqlglot.expressions.RegexpLike</a>'>>, 'STRFTIME': <function build_formatted_time.<locals>._builder>, 'STRING_SPLIT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Split">sqlglot.expressions.Split</a>'>>, 'STRING_SPLIT_REGEX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>'>>, 'STRPTIME': <function build_formatted_time.<locals>._builder>, 'STRUCT_PACK': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Struct">sqlglot.expressions.Struct</a>'>>, 'STR_SPLIT': <bound method Func.from_arg_list of <class '<a href="../expressions.html#Split">sqlglot.expressions.Split</a>'>>, 'STR_SPLIT_REGEX': <bound method Func.from_arg_list of <class '<a href="../expressions.html#RegexpSplit">sqlglot.expressions.RegexpSplit</a>'>>, 'TO_TIMESTAMP': <bound method Func.from_arg_list of <class '<a href="../expressions.html#UnixToTime">sqlglot.expressions.UnixToTime</a>'>>, 'RANGE': <function _build_generate_series.<locals>._builder>}</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">{<TokenType.ROLLUP: 'ROLLUP'>, <TokenType.INTERVAL: 'INTERVAL'>, <TokenType.UINT128: 'UINT128'>, <TokenType.UNIQUE: 'UNIQUE'>, <TokenType.NESTED: 'NESTED'>, <TokenType.RECURSIVE: 'RECURSIVE'>, <TokenType.SOME: 'SOME'>, <TokenType.TIMESTAMP_MS: 'TIMESTAMP_MS'>, <TokenType.PROCEDURE: 'PROCEDURE'>, <TokenType.UNNEST: 'UNNEST'>, <TokenType.STORAGE_INTEGRATION: 'STORAGE_INTEGRATION'>, <TokenType.PRAGMA: 'PRAGMA'>, <TokenType.ENUM8: 'ENUM8'>, <TokenType.RENAME: 'RENAME'>, <TokenType.VARIANT: 'VARIANT'>, <TokenType.NAME: 'NAME'>, <TokenType.VECTOR: 'VECTOR'>, <TokenType.IMAGE: 'IMAGE'>, <TokenType.CURRENT_DATE: 'CURRENT_DATE'>, <TokenType.IS: 'IS'>, <TokenType.INET: 'INET'>, <TokenType.SCHEMA: 'SCHEMA'>, <TokenType.FIRST: 'FIRST'>, <TokenType.CURRENT_DATETIME: 'CURRENT_DATETIME'>, <TokenType.TRUNCATE: 'TRUNCATE'>, <TokenType.ARRAY: 'ARRAY'>, <TokenType.FORMAT: 'FORMAT'>, <TokenType.FOREIGN_KEY: 'FOREIGN_KEY'>, <TokenType.MEDIUMTEXT: 'MEDIUMTEXT'>, <TokenType.HSTORE: 'HSTORE'>, <TokenType.CASE: 'CASE'>, <TokenType.TIMESTAMP_NS: 'TIMESTAMP_NS'>, <TokenType.PARTITION: 'PARTITION'>, <TokenType.DICTIONARY: 'DICTIONARY'>, <TokenType.INT4RANGE: 'INT4RANGE'>, <TokenType.SIMPLEAGGREGATEFUNCTION: 'SIMPLEAGGREGATEFUNCTION'>, <TokenType.COMMIT: 'COMMIT'>, <TokenType.ROWS: 'ROWS'>, <TokenType.GEOGRAPHY: 'GEOGRAPHY'>, <TokenType.NVARCHAR: 'NVARCHAR'>, <TokenType.VARBINARY: 'VARBINARY'>, <TokenType.INT4MULTIRANGE: 'INT4MULTIRANGE'>, <TokenType.YEAR: 'YEAR'>, <TokenType.UMEDIUMINT: 'UMEDIUMINT'>, <TokenType.ANY: 'ANY'>, <TokenType.FUNCTION: 'FUNCTION'>, <TokenType.ALL: 'ALL'>, <TokenType.TABLE: 'TABLE'>, <TokenType.COLUMN: 'COLUMN'>, <TokenType.RANGE: 'RANGE'>, <TokenType.LONGBLOB: 'LONGBLOB'>, <TokenType.IPV6: 'IPV6'>, <TokenType.COMMAND: 'COMMAND'>, <TokenType.SHOW: 'SHOW'>, <TokenType.SETTINGS: 'SETTINGS'>, <TokenType.IPPREFIX: 'IPPREFIX'>, <TokenType.UINT: 'UINT'>, <TokenType.UNIQUEIDENTIFIER: 'UNIQUEIDENTIFIER'>, <TokenType.UNKNOWN: 'UNKNOWN'>, <TokenType.UBIGINT: 'UBIGINT'>, <TokenType.UTINYINT: 'UTINYINT'>, <TokenType.TSTZMULTIRANGE: 'TSTZMULTIRANGE'>, <TokenType.COLLATE: 'COLLATE'>, <TokenType.BIT: 'BIT'>, <TokenType.TIME: 'TIME'>, <TokenType.CUBE: 'CUBE'>, <TokenType.CHAR: 'CHAR'>, <TokenType.KILL: 'KILL'>, <TokenType.END: 'END'>, <TokenType.NUMRANGE: 'NUMRANGE'>, <TokenType.DATERANGE: 'DATERANGE'>, <TokenType.ASC: 'ASC'>, <TokenType.OBJECT_IDENTIFIER: 'OBJECT_IDENTIFIER'>, <TokenType.IDENTIFIER: 'IDENTIFIER'>, <TokenType.AUTO_INCREMENT: 'AUTO_INCREMENT'>, <TokenType.INT256: 'INT256'>, <TokenType.MERGE: 'MERGE'>, <TokenType.BEGIN: 'BEGIN'>, <TokenType.DEFAULT: 'DEFAULT'>, <TokenType.LONGTEXT: 'LONGTEXT'>, <TokenType.TINYTEXT: 'TINYTEXT'>, <TokenType.DATEMULTIRANGE: 'DATEMULTIRANGE'>, <TokenType.GEOMETRY: 'GEOMETRY'>, <TokenType.ESCAPE: 'ESCAPE'>, <TokenType.TINYBLOB: 'TINYBLOB'>, <TokenType.JSONB: 'JSONB'>, <TokenType.EXISTS: 'EXISTS'>, <TokenType.FLOAT: 'FLOAT'>, <TokenType.CURRENT_USER: 'CURRENT_USER'>, <TokenType.MODEL: 'MODEL'>, <TokenType.DATE: 'DATE'>, <TokenType.SMALLMONEY: 'SMALLMONEY'>, <TokenType.ENUM: 'ENUM'>, <TokenType.CACHE: 'CACHE'>, <TokenType.INT8RANGE: 'INT8RANGE'>, <TokenType.FIXEDSTRING: 'FIXEDSTRING'>, <TokenType.TSTZRANGE: 'TSTZRANGE'>, <TokenType.COMMENT: 'COMMENT'>, <TokenType.TDIGEST: 'TDIGEST'>, <TokenType.COPY: 'COPY'>, <TokenType.DESCRIBE: 'DESCRIBE'>, <TokenType.VAR: 'VAR'>, <TokenType.ISNULL: 'ISNULL'>, <TokenType.PERCENT: 'PERCENT'>, <TokenType.TIMESTAMPTZ: 'TIMESTAMPTZ'>, <TokenType.OPERATOR: 'OPERATOR'>, <TokenType.CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP'>, <TokenType.XML: 'XML'>, <TokenType.IPADDRESS: 'IPADDRESS'>, <TokenType.OVERWRITE: 'OVERWRITE'>, <TokenType.DOUBLE: 'DOUBLE'>, <TokenType.TEXT: 'TEXT'>, <TokenType.DATETIME: 'DATETIME'>, <TokenType.DATE32: 'DATE32'>, <TokenType.LOAD: 'LOAD'>, <TokenType.INT8MULTIRANGE: 'INT8MULTIRANGE'>, <TokenType.BPCHAR: 'BPCHAR'>, <TokenType.NULLABLE: 'NULLABLE'>, <TokenType.NCHAR: 'NCHAR'>, <TokenType.BIGINT: 'BIGINT'>, <TokenType.DELETE: 'DELETE'>, <TokenType.ROW: 'ROW'>, <TokenType.WAREHOUSE: 'WAREHOUSE'>, <TokenType.TIMETZ: 'TIMETZ'>, <TokenType.MAP: 'MAP'>, <TokenType.DATABASE: 'DATABASE'>, <TokenType.CURRENT_TIME: 'CURRENT_TIME'>, <TokenType.USERDEFINED: 'USERDEFINED'>, <TokenType.DATETIME64: 'DATETIME64'>, <TokenType.ENUM16: 'ENUM16'>, <TokenType.AGGREGATEFUNCTION: 'AGGREGATEFUNCTION'>, <TokenType.TEMPORARY: 'TEMPORARY'>, <TokenType.TAG: 'TAG'>, <TokenType.OVERLAPS: 'OVERLAPS'>, <TokenType.UINT256: 'UINT256'>, <TokenType.NUMMULTIRANGE: 'NUMMULTIRANGE'>, <TokenType.STRAIGHT_JOIN: 'STRAIGHT_JOIN'>, <TokenType.TIMESTAMPLTZ: 'TIMESTAMPLTZ'>, <TokenType.BINARY: 'BINARY'>, <TokenType.SEQUENCE: 'SEQUENCE'>, <TokenType.INDEX: 'INDEX'>, <TokenType.MEDIUMINT: 'MEDIUMINT'>, <TokenType.CONSTRAINT: 'CONSTRAINT'>, <TokenType.INT: 'INT'>, <TokenType.LOWCARDINALITY: 'LOWCARDINALITY'>, <TokenType.SMALLINT: 'SMALLINT'>, <TokenType.FILTER: 'FILTER'>, <TokenType.SET: 'SET'>, <TokenType.TRUE: 'TRUE'>, <TokenType.UNPIVOT: 'UNPIVOT'>, <TokenType.TSRANGE: 'TSRANGE'>, <TokenType.UUID: 'UUID'>, <TokenType.DECIMAL: 'DECIMAL'>, <TokenType.JSON: 'JSON'>, <TokenType.VARCHAR: 'VARCHAR'>, <TokenType.MONEY: 'MONEY'>, <TokenType.PSEUDO_TYPE: 'PSEUDO_TYPE'>, <TokenType.SMALLSERIAL: 'SMALLSERIAL'>, <TokenType.DESC: 'DESC'>, <TokenType.MEDIUMBLOB: 'MEDIUMBLOB'>, <TokenType.USE: 'USE'>, <TokenType.REPLACE: 'REPLACE'>, <TokenType.FINAL: 'FINAL'>, <TokenType.OBJECT: 'OBJECT'>, <TokenType.SUPER: 'SUPER'>, <TokenType.REFERENCES: 'REFERENCES'>, <TokenType.IPV4: 'IPV4'>, <TokenType.BOOLEAN: 'BOOLEAN'>, <TokenType.NEXT: 'NEXT'>, <TokenType.KEEP: 'KEEP'>, <TokenType.REFRESH: 'REFRESH'>, <TokenType.BIGDECIMAL: 'BIGDECIMAL'>, <TokenType.VIEW: 'VIEW'>, <TokenType.NULL: 'NULL'>, <TokenType.SERIAL: 'SERIAL'>, <TokenType.USMALLINT: 'USMALLINT'>, <TokenType.UPDATE: 'UPDATE'>, <TokenType.HLLSKETCH: 'HLLSKETCH'>, <TokenType.EXECUTE: 'EXECUTE'>, <TokenType.ROWVERSION: 'ROWVERSION'>, <TokenType.LIST: 'LIST'>, <TokenType.BIGSERIAL: 'BIGSERIAL'>, <TokenType.TIMESTAMPNTZ: 'TIMESTAMPNTZ'>, <TokenType.TIMESTAMP_S: 'TIMESTAMP_S'>, <TokenType.DIV: 'DIV'>, <TokenType.STRUCT: 'STRUCT'>, <TokenType.TINYINT: 'TINYINT'>, <TokenType.FALSE: 'FALSE'>, <TokenType.PIVOT: 'PIVOT'>, <TokenType.INT128: 'INT128'>, <TokenType.VOLATILE: 'VOLATILE'>, <TokenType.UDECIMAL: 'UDECIMAL'>, <TokenType.STREAMLIT: 'STREAMLIT'>, <TokenType.TIMESTAMP: 'TIMESTAMP'>, <TokenType.TOP: 'TOP'>, <TokenType.TSMULTIRANGE: 'TSMULTIRANGE'>, <TokenType.ORDINALITY: 'ORDINALITY'>}</span> + <label class="view-value-button pdoc-button" for="DuckDB.Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{<TokenType.UPDATE: 'UPDATE'>, <TokenType.UMEDIUMINT: 'UMEDIUMINT'>, <TokenType.GEOGRAPHY: 'GEOGRAPHY'>, <TokenType.IPV6: 'IPV6'>, <TokenType.BIT: 'BIT'>, <TokenType.VIEW: 'VIEW'>, <TokenType.USE: 'USE'>, <TokenType.PSEUDO_TYPE: 'PSEUDO_TYPE'>, <TokenType.EXECUTE: 'EXECUTE'>, <TokenType.IMAGE: 'IMAGE'>, <TokenType.TOP: 'TOP'>, <TokenType.STORAGE_INTEGRATION: 'STORAGE_INTEGRATION'>, <TokenType.DATEMULTIRANGE: 'DATEMULTIRANGE'>, <TokenType.ENUM: 'ENUM'>, <TokenType.UDECIMAL: 'UDECIMAL'>, <TokenType.TIMESTAMPTZ: 'TIMESTAMPTZ'>, <TokenType.ENUM8: 'ENUM8'>, <TokenType.FALSE: 'FALSE'>, <TokenType.MEDIUMINT: 'MEDIUMINT'>, <TokenType.SOME: 'SOME'>, <TokenType.DOUBLE: 'DOUBLE'>, <TokenType.INDEX: 'INDEX'>, <TokenType.CURRENT_TIME: 'CURRENT_TIME'>, <TokenType.PRAGMA: 'PRAGMA'>, <TokenType.STRAIGHT_JOIN: 'STRAIGHT_JOIN'>, <TokenType.RECURSIVE: 'RECURSIVE'>, <TokenType.FLOAT: 'FLOAT'>, <TokenType.USMALLINT: 'USMALLINT'>, <TokenType.UINT128: 'UINT128'>, <TokenType.VAR: 'VAR'>, <TokenType.TIMESTAMP_MS: 'TIMESTAMP_MS'>, <TokenType.BEGIN: 'BEGIN'>, <TokenType.CONSTRAINT: 'CONSTRAINT'>, <TokenType.PIVOT: 'PIVOT'>, <TokenType.LIST: 'LIST'>, <TokenType.UUID: 'UUID'>, <TokenType.JSON: 'JSON'>, <TokenType.COLLATE: 'COLLATE'>, <TokenType.OVERWRITE: 'OVERWRITE'>, <TokenType.BINARY: 'BINARY'>, <TokenType.BIGDECIMAL: 'BIGDECIMAL'>, <TokenType.SERIAL: 'SERIAL'>, <TokenType.MODEL: 'MODEL'>, <TokenType.REFRESH: 'REFRESH'>, <TokenType.OBJECT: 'OBJECT'>, <TokenType.UNIQUE: 'UNIQUE'>, <TokenType.COPY: 'COPY'>, <TokenType.FIRST: 'FIRST'>, <TokenType.VARIANT: 'VARIANT'>, <TokenType.VARCHAR: 'VARCHAR'>, <TokenType.RANGE: 'RANGE'>, <TokenType.TABLE: 'TABLE'>, <TokenType.KEEP: 'KEEP'>, <TokenType.TAG: 'TAG'>, <TokenType.TINYBLOB: 'TINYBLOB'>, <TokenType.IPPREFIX: 'IPPREFIX'>, <TokenType.ORDINALITY: 'ORDINALITY'>, <TokenType.BIGINT: 'BIGINT'>, <TokenType.LOWCARDINALITY: 'LOWCARDINALITY'>, <TokenType.FUNCTION: 'FUNCTION'>, <TokenType.INT8MULTIRANGE: 'INT8MULTIRANGE'>, <TokenType.CHAR: 'CHAR'>, <TokenType.ENUM16: 'ENUM16'>, <TokenType.YEAR: 'YEAR'>, <TokenType.TIMESTAMP_S: 'TIMESTAMP_S'>, <TokenType.NESTED: 'NESTED'>, <TokenType.CURRENT_DATE: 'CURRENT_DATE'>, <TokenType.TEMPORARY: 'TEMPORARY'>, <TokenType.NEXT: 'NEXT'>, <TokenType.INT4RANGE: 'INT4RANGE'>, <TokenType.END: 'END'>, <TokenType.JSONB: 'JSONB'>, <TokenType.GEOMETRY: 'GEOMETRY'>, <TokenType.HLLSKETCH: 'HLLSKETCH'>, <TokenType.AUTO_INCREMENT: 'AUTO_INCREMENT'>, <TokenType.ANY: 'ANY'>, <TokenType.USERDEFINED: 'USERDEFINED'>, <TokenType.TSRANGE: 'TSRANGE'>, <TokenType.TIMESTAMPNTZ: 'TIMESTAMPNTZ'>, <TokenType.DATETIME64: 'DATETIME64'>, <TokenType.UNKNOWN: 'UNKNOWN'>, <TokenType.MEDIUMTEXT: 'MEDIUMTEXT'>, <TokenType.MAP: 'MAP'>, <TokenType.FILTER: 'FILTER'>, <TokenType.AGGREGATEFUNCTION: 'AGGREGATEFUNCTION'>, <TokenType.ASC: 'ASC'>, <TokenType.REFERENCES: 'REFERENCES'>, <TokenType.UINT256: 'UINT256'>, <TokenType.BPCHAR: 'BPCHAR'>, <TokenType.TSTZMULTIRANGE: 'TSTZMULTIRANGE'>, <TokenType.SUPER: 'SUPER'>, <TokenType.PERCENT: 'PERCENT'>, <TokenType.DESCRIBE: 'DESCRIBE'>, <TokenType.SCHEMA: 'SCHEMA'>, <TokenType.EXISTS: 'EXISTS'>, <TokenType.IS: 'IS'>, <TokenType.TDIGEST: 'TDIGEST'>, <TokenType.COMMAND: 'COMMAND'>, <TokenType.DATETIME: 'DATETIME'>, <TokenType.NVARCHAR: 'NVARCHAR'>, <TokenType.REPLACE: 'REPLACE'>, <TokenType.KILL: 'KILL'>, <TokenType.FIXEDSTRING: 'FIXEDSTRING'>, <TokenType.MEDIUMBLOB: 'MEDIUMBLOB'>, <TokenType.UNNEST: 'UNNEST'>, <TokenType.TIME: 'TIME'>, <TokenType.COLUMN: 'COLUMN'>, <TokenType.NULLABLE: 'NULLABLE'>, <TokenType.FINAL: 'FINAL'>, <TokenType.UINT: 'UINT'>, <TokenType.CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP'>, <TokenType.PROCEDURE: 'PROCEDURE'>, <TokenType.SMALLSERIAL: 'SMALLSERIAL'>, <TokenType.INT8RANGE: 'INT8RANGE'>, <TokenType.TIMESTAMP: 'TIMESTAMP'>, <TokenType.OVERLAPS: 'OVERLAPS'>, <TokenType.INT128: 'INT128'>, <TokenType.STREAMLIT: 'STREAMLIT'>, <TokenType.BIGSERIAL: 'BIGSERIAL'>, <TokenType.VECTOR: 'VECTOR'>, <TokenType.CURRENT_DATETIME: 'CURRENT_DATETIME'>, <TokenType.HSTORE: 'HSTORE'>, <TokenType.OPERATOR: 'OPERATOR'>, <TokenType.ROWS: 'ROWS'>, <TokenType.STRUCT: 'STRUCT'>, <TokenType.INT256: 'INT256'>, <TokenType.MERGE: 'MERGE'>, <TokenType.LOAD: 'LOAD'>, <TokenType.FOREIGN_KEY: 'FOREIGN_KEY'>, <TokenType.UTINYINT: 'UTINYINT'>, <TokenType.NAME: 'NAME'>, <TokenType.INTERVAL: 'INTERVAL'>, <TokenType.ROLLUP: 'ROLLUP'>, <TokenType.MONEY: 'MONEY'>, <TokenType.NCHAR: 'NCHAR'>, <TokenType.WAREHOUSE: 'WAREHOUSE'>, <TokenType.XML: 'XML'>, <TokenType.COMMENT: 'COMMENT'>, <TokenType.DIV: 'DIV'>, <TokenType.NUMMULTIRANGE: 'NUMMULTIRANGE'>, <TokenType.OBJECT_IDENTIFIER: 'OBJECT_IDENTIFIER'>, <TokenType.DATE: 'DATE'>, <TokenType.LONGBLOB: 'LONGBLOB'>, <TokenType.BOOLEAN: 'BOOLEAN'>, <TokenType.NUMRANGE: 'NUMRANGE'>, <TokenType.TRUNCATE: 'TRUNCATE'>, <TokenType.PARTITION: 'PARTITION'>, <TokenType.CASE: 'CASE'>, <TokenType.SMALLMONEY: 'SMALLMONEY'>, <TokenType.UBIGINT: 'UBIGINT'>, <TokenType.NULL: 'NULL'>, <TokenType.TSTZRANGE: 'TSTZRANGE'>, <TokenType.IPV4: 'IPV4'>, <TokenType.DEFAULT: 'DEFAULT'>, <TokenType.TIMETZ: 'TIMETZ'>, <TokenType.ESCAPE: 'ESCAPE'>, <TokenType.LONGTEXT: 'LONGTEXT'>, <TokenType.SMALLINT: 'SMALLINT'>, <TokenType.ARRAY: 'ARRAY'>, <TokenType.UNIQUEIDENTIFIER: 'UNIQUEIDENTIFIER'>, <TokenType.ROWVERSION: 'ROWVERSION'>, <TokenType.TEXT: 'TEXT'>, <TokenType.DESC: 'DESC'>, <TokenType.TINYTEXT: 'TINYTEXT'>, <TokenType.COMMIT: 'COMMIT'>, <TokenType.TINYINT: 'TINYINT'>, <TokenType.ROW: 'ROW'>, <TokenType.ISNULL: 'ISNULL'>, <TokenType.VARBINARY: 'VARBINARY'>, <TokenType.TSMULTIRANGE: 'TSMULTIRANGE'>, <TokenType.DATE32: 'DATE32'>, <TokenType.DATABASE: 'DATABASE'>, <TokenType.VOLATILE: 'VOLATILE'>, <TokenType.ALL: 'ALL'>, <TokenType.INET: 'INET'>, <TokenType.INT4MULTIRANGE: 'INT4MULTIRANGE'>, <TokenType.CUBE: 'CUBE'>, <TokenType.SET: 'SET'>, <TokenType.SEQUENCE: 'SEQUENCE'>, <TokenType.SHOW: 'SHOW'>, <TokenType.IPADDRESS: 'IPADDRESS'>, <TokenType.CACHE: 'CACHE'>, <TokenType.UNPIVOT: 'UNPIVOT'>, <TokenType.DECIMAL: 'DECIMAL'>, <TokenType.DATERANGE: 'DATERANGE'>, <TokenType.TIMESTAMPLTZ: 'TIMESTAMPLTZ'>, <TokenType.TIMESTAMP_NS: 'TIMESTAMP_NS'>, <TokenType.TRUE: 'TRUE'>, <TokenType.SIMPLEAGGREGATEFUNCTION: 'SIMPLEAGGREGATEFUNCTION'>, <TokenType.IDENTIFIER: 'IDENTIFIER'>, <TokenType.FORMAT: 'FORMAT'>, <TokenType.DICTIONARY: 'DICTIONARY'>, <TokenType.CURRENT_USER: 'CURRENT_USER'>, <TokenType.INT: 'INT'>, <TokenType.RENAME: 'RENAME'>, <TokenType.SETTINGS: 'SETTINGS'>, <TokenType.DELETE: 'DELETE'>}</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">{<TokenType.ROLLUP: 'ROLLUP'>, <TokenType.INTERVAL: 'INTERVAL'>, <TokenType.UINT128: 'UINT128'>, <TokenType.UNIQUE: 'UNIQUE'>, <TokenType.NESTED: 'NESTED'>, <TokenType.RECURSIVE: 'RECURSIVE'>, <TokenType.SOME: 'SOME'>, <TokenType.TIMESTAMP_MS: 'TIMESTAMP_MS'>, <TokenType.PROCEDURE: 'PROCEDURE'>, <TokenType.UNNEST: 'UNNEST'>, <TokenType.STORAGE_INTEGRATION: 'STORAGE_INTEGRATION'>, <TokenType.PRAGMA: 'PRAGMA'>, <TokenType.ENUM8: 'ENUM8'>, <TokenType.RENAME: 'RENAME'>, <TokenType.VARIANT: 'VARIANT'>, <TokenType.NAME: 'NAME'>, <TokenType.VECTOR: 'VECTOR'>, <TokenType.IMAGE: 'IMAGE'>, <TokenType.CURRENT_DATE: 'CURRENT_DATE'>, <TokenType.IS: 'IS'>, <TokenType.INET: 'INET'>, <TokenType.SCHEMA: 'SCHEMA'>, <TokenType.FIRST: 'FIRST'>, <TokenType.CURRENT_DATETIME: 'CURRENT_DATETIME'>, <TokenType.TRUNCATE: 'TRUNCATE'>, <TokenType.ARRAY: 'ARRAY'>, <TokenType.FORMAT: 'FORMAT'>, <TokenType.FOREIGN_KEY: 'FOREIGN_KEY'>, <TokenType.MEDIUMTEXT: 'MEDIUMTEXT'>, <TokenType.NATURAL: 'NATURAL'>, <TokenType.HSTORE: 'HSTORE'>, <TokenType.CASE: 'CASE'>, <TokenType.TIMESTAMP_NS: 'TIMESTAMP_NS'>, <TokenType.PARTITION: 'PARTITION'>, <TokenType.DICTIONARY: 'DICTIONARY'>, <TokenType.INT4RANGE: 'INT4RANGE'>, <TokenType.SIMPLEAGGREGATEFUNCTION: 'SIMPLEAGGREGATEFUNCTION'>, <TokenType.COMMIT: 'COMMIT'>, <TokenType.ROWS: 'ROWS'>, <TokenType.GEOGRAPHY: 'GEOGRAPHY'>, <TokenType.NVARCHAR: 'NVARCHAR'>, <TokenType.VARBINARY: 'VARBINARY'>, <TokenType.INT4MULTIRANGE: 'INT4MULTIRANGE'>, <TokenType.YEAR: 'YEAR'>, <TokenType.UMEDIUMINT: 'UMEDIUMINT'>, <TokenType.ANY: 'ANY'>, <TokenType.FUNCTION: 'FUNCTION'>, <TokenType.ALL: 'ALL'>, <TokenType.TABLE: 'TABLE'>, <TokenType.COLUMN: 'COLUMN'>, <TokenType.RANGE: 'RANGE'>, <TokenType.LONGBLOB: 'LONGBLOB'>, <TokenType.IPV6: 'IPV6'>, <TokenType.COMMAND: 'COMMAND'>, <TokenType.SHOW: 'SHOW'>, <TokenType.SETTINGS: 'SETTINGS'>, <TokenType.IPPREFIX: 'IPPREFIX'>, <TokenType.UINT: 'UINT'>, <TokenType.UNIQUEIDENTIFIER: 'UNIQUEIDENTIFIER'>, <TokenType.UNKNOWN: 'UNKNOWN'>, <TokenType.UBIGINT: 'UBIGINT'>, <TokenType.RIGHT: 'RIGHT'>, <TokenType.UTINYINT: 'UTINYINT'>, <TokenType.TSTZMULTIRANGE: 'TSTZMULTIRANGE'>, <TokenType.COLLATE: 'COLLATE'>, <TokenType.BIT: 'BIT'>, <TokenType.TIME: 'TIME'>, <TokenType.CUBE: 'CUBE'>, <TokenType.CHAR: 'CHAR'>, <TokenType.KILL: 'KILL'>, <TokenType.END: 'END'>, <TokenType.NUMRANGE: 'NUMRANGE'>, <TokenType.DATERANGE: 'DATERANGE'>, <TokenType.WINDOW: 'WINDOW'>, <TokenType.ASC: 'ASC'>, <TokenType.OBJECT_IDENTIFIER: 'OBJECT_IDENTIFIER'>, <TokenType.IDENTIFIER: 'IDENTIFIER'>, <TokenType.AUTO_INCREMENT: 'AUTO_INCREMENT'>, <TokenType.INT256: 'INT256'>, <TokenType.MERGE: 'MERGE'>, <TokenType.BEGIN: 'BEGIN'>, <TokenType.DEFAULT: 'DEFAULT'>, <TokenType.LONGTEXT: 'LONGTEXT'>, <TokenType.TINYTEXT: 'TINYTEXT'>, <TokenType.DATEMULTIRANGE: 'DATEMULTIRANGE'>, <TokenType.GEOMETRY: 'GEOMETRY'>, <TokenType.ESCAPE: 'ESCAPE'>, <TokenType.TINYBLOB: 'TINYBLOB'>, <TokenType.JSONB: 'JSONB'>, <TokenType.ANTI: 'ANTI'>, <TokenType.EXISTS: 'EXISTS'>, <TokenType.FLOAT: 'FLOAT'>, <TokenType.CURRENT_USER: 'CURRENT_USER'>, <TokenType.MODEL: 'MODEL'>, <TokenType.DATE: 'DATE'>, <TokenType.SMALLMONEY: 'SMALLMONEY'>, <TokenType.ENUM: 'ENUM'>, <TokenType.CACHE: 'CACHE'>, <TokenType.INT8RANGE: 'INT8RANGE'>, <TokenType.FIXEDSTRING: 'FIXEDSTRING'>, <TokenType.TSTZRANGE: 'TSTZRANGE'>, <TokenType.APPLY: 'APPLY'>, <TokenType.COMMENT: 'COMMENT'>, <TokenType.TDIGEST: 'TDIGEST'>, <TokenType.COPY: 'COPY'>, <TokenType.DESCRIBE: 'DESCRIBE'>, <TokenType.VAR: 'VAR'>, <TokenType.ISNULL: 'ISNULL'>, <TokenType.PERCENT: 'PERCENT'>, <TokenType.TIMESTAMPTZ: 'TIMESTAMPTZ'>, <TokenType.OPERATOR: 'OPERATOR'>, <TokenType.CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP'>, <TokenType.XML: 'XML'>, <TokenType.IPADDRESS: 'IPADDRESS'>, <TokenType.OVERWRITE: 'OVERWRITE'>, <TokenType.DOUBLE: 'DOUBLE'>, <TokenType.TEXT: 'TEXT'>, <TokenType.DATETIME: 'DATETIME'>, <TokenType.DATE32: 'DATE32'>, <TokenType.LOAD: 'LOAD'>, <TokenType.INT8MULTIRANGE: 'INT8MULTIRANGE'>, <TokenType.BPCHAR: 'BPCHAR'>, <TokenType.NULLABLE: 'NULLABLE'>, <TokenType.NCHAR: 'NCHAR'>, <TokenType.BIGINT: 'BIGINT'>, <TokenType.DELETE: 'DELETE'>, <TokenType.ROW: 'ROW'>, <TokenType.WAREHOUSE: 'WAREHOUSE'>, <TokenType.TIMETZ: 'TIMETZ'>, <TokenType.MAP: 'MAP'>, <TokenType.DATABASE: 'DATABASE'>, <TokenType.CURRENT_TIME: 'CURRENT_TIME'>, <TokenType.USERDEFINED: 'USERDEFINED'>, <TokenType.DATETIME64: 'DATETIME64'>, <TokenType.ENUM16: 'ENUM16'>, <TokenType.AGGREGATEFUNCTION: 'AGGREGATEFUNCTION'>, <TokenType.TEMPORARY: 'TEMPORARY'>, <TokenType.SEMI: 'SEMI'>, <TokenType.TAG: 'TAG'>, <TokenType.LEFT: 'LEFT'>, <TokenType.OVERLAPS: 'OVERLAPS'>, <TokenType.UINT256: 'UINT256'>, <TokenType.NUMMULTIRANGE: 'NUMMULTIRANGE'>, <TokenType.STRAIGHT_JOIN: 'STRAIGHT_JOIN'>, <TokenType.TIMESTAMPLTZ: 'TIMESTAMPLTZ'>, <TokenType.BINARY: 'BINARY'>, <TokenType.OFFSET: 'OFFSET'>, <TokenType.SEQUENCE: 'SEQUENCE'>, <TokenType.ASOF: 'ASOF'>, <TokenType.INDEX: 'INDEX'>, <TokenType.MEDIUMINT: 'MEDIUMINT'>, <TokenType.CONSTRAINT: 'CONSTRAINT'>, <TokenType.INT: 'INT'>, <TokenType.LOWCARDINALITY: 'LOWCARDINALITY'>, <TokenType.SMALLINT: 'SMALLINT'>, <TokenType.FILTER: 'FILTER'>, <TokenType.SET: 'SET'>, <TokenType.TRUE: 'TRUE'>, <TokenType.UNPIVOT: 'UNPIVOT'>, <TokenType.TSRANGE: 'TSRANGE'>, <TokenType.UUID: 'UUID'>, <TokenType.DECIMAL: 'DECIMAL'>, <TokenType.JSON: 'JSON'>, <TokenType.VARCHAR: 'VARCHAR'>, <TokenType.MONEY: 'MONEY'>, <TokenType.PSEUDO_TYPE: 'PSEUDO_TYPE'>, <TokenType.FULL: 'FULL'>, <TokenType.SMALLSERIAL: 'SMALLSERIAL'>, <TokenType.DESC: 'DESC'>, <TokenType.MEDIUMBLOB: 'MEDIUMBLOB'>, <TokenType.USE: 'USE'>, <TokenType.REPLACE: 'REPLACE'>, <TokenType.FINAL: 'FINAL'>, <TokenType.OBJECT: 'OBJECT'>, <TokenType.SUPER: 'SUPER'>, <TokenType.REFERENCES: 'REFERENCES'>, <TokenType.IPV4: 'IPV4'>, <TokenType.BOOLEAN: 'BOOLEAN'>, <TokenType.NEXT: 'NEXT'>, <TokenType.KEEP: 'KEEP'>, <TokenType.REFRESH: 'REFRESH'>, <TokenType.BIGDECIMAL: 'BIGDECIMAL'>, <TokenType.VIEW: 'VIEW'>, <TokenType.NULL: 'NULL'>, <TokenType.SERIAL: 'SERIAL'>, <TokenType.USMALLINT: 'USMALLINT'>, <TokenType.UPDATE: 'UPDATE'>, <TokenType.HLLSKETCH: 'HLLSKETCH'>, <TokenType.EXECUTE: 'EXECUTE'>, <TokenType.ROWVERSION: 'ROWVERSION'>, <TokenType.LIST: 'LIST'>, <TokenType.BIGSERIAL: 'BIGSERIAL'>, <TokenType.TIMESTAMPNTZ: 'TIMESTAMPNTZ'>, <TokenType.TIMESTAMP_S: 'TIMESTAMP_S'>, <TokenType.DIV: 'DIV'>, <TokenType.STRUCT: 'STRUCT'>, <TokenType.TINYINT: 'TINYINT'>, <TokenType.FALSE: 'FALSE'>, <TokenType.PIVOT: 'PIVOT'>, <TokenType.INT128: 'INT128'>, <TokenType.VOLATILE: 'VOLATILE'>, <TokenType.UDECIMAL: 'UDECIMAL'>, <TokenType.STREAMLIT: 'STREAMLIT'>, <TokenType.TIMESTAMP: 'TIMESTAMP'>, <TokenType.TOP: 'TOP'>, <TokenType.TSMULTIRANGE: 'TSMULTIRANGE'>, <TokenType.ORDINALITY: 'ORDINALITY'>}</span> + <label class="view-value-button pdoc-button" for="DuckDB.Parser.ID_VAR_TOKENS-view-value"></label><span class="default_value">{<TokenType.UPDATE: 'UPDATE'>, <TokenType.UMEDIUMINT: 'UMEDIUMINT'>, <TokenType.GEOGRAPHY: 'GEOGRAPHY'>, <TokenType.IPV6: 'IPV6'>, <TokenType.BIT: 'BIT'>, <TokenType.VIEW: 'VIEW'>, <TokenType.USE: 'USE'>, <TokenType.ASOF: 'ASOF'>, <TokenType.PSEUDO_TYPE: 'PSEUDO_TYPE'>, <TokenType.EXECUTE: 'EXECUTE'>, <TokenType.IMAGE: 'IMAGE'>, <TokenType.TOP: 'TOP'>, <TokenType.STORAGE_INTEGRATION: 'STORAGE_INTEGRATION'>, <TokenType.DATEMULTIRANGE: 'DATEMULTIRANGE'>, <TokenType.ENUM: 'ENUM'>, <TokenType.UDECIMAL: 'UDECIMAL'>, <TokenType.TIMESTAMPTZ: 'TIMESTAMPTZ'>, <TokenType.ENUM8: 'ENUM8'>, <TokenType.FALSE: 'FALSE'>, <TokenType.MEDIUMINT: 'MEDIUMINT'>, <TokenType.SOME: 'SOME'>, <TokenType.DOUBLE: 'DOUBLE'>, <TokenType.INDEX: 'INDEX'>, <TokenType.CURRENT_TIME: 'CURRENT_TIME'>, <TokenType.PRAGMA: 'PRAGMA'>, <TokenType.STRAIGHT_JOIN: 'STRAIGHT_JOIN'>, <TokenType.RECURSIVE: 'RECURSIVE'>, <TokenType.FLOAT: 'FLOAT'>, <TokenType.USMALLINT: 'USMALLINT'>, <TokenType.UINT128: 'UINT128'>, <TokenType.VAR: 'VAR'>, <TokenType.TIMESTAMP_MS: 'TIMESTAMP_MS'>, <TokenType.BEGIN: 'BEGIN'>, <TokenType.CONSTRAINT: 'CONSTRAINT'>, <TokenType.PIVOT: 'PIVOT'>, <TokenType.LIST: 'LIST'>, <TokenType.UUID: 'UUID'>, <TokenType.JSON: 'JSON'>, <TokenType.COLLATE: 'COLLATE'>, <TokenType.OVERWRITE: 'OVERWRITE'>, <TokenType.BINARY: 'BINARY'>, <TokenType.BIGDECIMAL: 'BIGDECIMAL'>, <TokenType.SERIAL: 'SERIAL'>, <TokenType.MODEL: 'MODEL'>, <TokenType.REFRESH: 'REFRESH'>, <TokenType.OBJECT: 'OBJECT'>, <TokenType.UNIQUE: 'UNIQUE'>, <TokenType.COPY: 'COPY'>, <TokenType.FIRST: 'FIRST'>, <TokenType.VARIANT: 'VARIANT'>, <TokenType.LEFT: 'LEFT'>, <TokenType.VARCHAR: 'VARCHAR'>, <TokenType.APPLY: 'APPLY'>, <TokenType.RANGE: 'RANGE'>, <TokenType.TABLE: 'TABLE'>, <TokenType.KEEP: 'KEEP'>, <TokenType.SEMI: 'SEMI'>, <TokenType.TAG: 'TAG'>, <TokenType.TINYBLOB: 'TINYBLOB'>, <TokenType.IPPREFIX: 'IPPREFIX'>, <TokenType.ORDINALITY: 'ORDINALITY'>, <TokenType.BIGINT: 'BIGINT'>, <TokenType.LOWCARDINALITY: 'LOWCARDINALITY'>, <TokenType.FUNCTION: 'FUNCTION'>, <TokenType.INT8MULTIRANGE: 'INT8MULTIRANGE'>, <TokenType.CHAR: 'CHAR'>, <TokenType.ENUM16: 'ENUM16'>, <TokenType.YEAR: 'YEAR'>, <TokenType.TIMESTAMP_S: 'TIMESTAMP_S'>, <TokenType.NESTED: 'NESTED'>, <TokenType.CURRENT_DATE: 'CURRENT_DATE'>, <TokenType.TEMPORARY: 'TEMPORARY'>, <TokenType.NEXT: 'NEXT'>, <TokenType.INT4RANGE: 'INT4RANGE'>, <TokenType.END: 'END'>, <TokenType.JSONB: 'JSONB'>, <TokenType.GEOMETRY: 'GEOMETRY'>, <TokenType.HLLSKETCH: 'HLLSKETCH'>, <TokenType.AUTO_INCREMENT: 'AUTO_INCREMENT'>, <TokenType.ANY: 'ANY'>, <TokenType.INT: 'INT'>, <TokenType.USERDEFINED: 'USERDEFINED'>, <TokenType.TSRANGE: 'TSRANGE'>, <TokenType.TIMESTAMPNTZ: 'TIMESTAMPNTZ'>, <TokenType.DATETIME64: 'DATETIME64'>, <TokenType.UNKNOWN: 'UNKNOWN'>, <TokenType.MEDIUMTEXT: 'MEDIUMTEXT'>, <TokenType.MAP: 'MAP'>, <TokenType.FILTER: 'FILTER'>, <TokenType.AGGREGATEFUNCTION: 'AGGREGATEFUNCTION'>, <TokenType.ASC: 'ASC'>, <TokenType.REFERENCES: 'REFERENCES'>, <TokenType.UINT256: 'UINT256'>, <TokenType.BPCHAR: 'BPCHAR'>, <TokenType.TSTZMULTIRANGE: 'TSTZMULTIRANGE'>, <TokenType.SUPER: 'SUPER'>, <TokenType.PERCENT: 'PERCENT'>, <TokenType.DESCRIBE: 'DESCRIBE'>, <TokenType.RIGHT: 'RIGHT'>, <TokenType.SCHEMA: 'SCHEMA'>, <TokenType.EXISTS: 'EXISTS'>, <TokenType.IS: 'IS'>, <TokenType.TDIGEST: 'TDIGEST'>, <TokenType.COMMAND: 'COMMAND'>, <TokenType.DATETIME: 'DATETIME'>, <TokenType.NVARCHAR: 'NVARCHAR'>, <TokenType.REPLACE: 'REPLACE'>, <TokenType.KILL: 'KILL'>, <TokenType.FIXEDSTRING: 'FIXEDSTRING'>, <TokenType.MEDIUMBLOB: 'MEDIUMBLOB'>, <TokenType.UNNEST: 'UNNEST'>, <TokenType.TIME: 'TIME'>, <TokenType.COLUMN: 'COLUMN'>, <TokenType.NULLABLE: 'NULLABLE'>, <TokenType.FINAL: 'FINAL'>, <TokenType.UINT: 'UINT'>, <TokenType.CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP'>, <TokenType.PROCEDURE: 'PROCEDURE'>, <TokenType.SMALLSERIAL: 'SMALLSERIAL'>, <TokenType.INT8RANGE: 'INT8RANGE'>, <TokenType.TIMESTAMP: 'TIMESTAMP'>, <TokenType.OVERLAPS: 'OVERLAPS'>, <TokenType.INT128: 'INT128'>, <TokenType.STREAMLIT: 'STREAMLIT'>, <TokenType.BIGSERIAL: 'BIGSERIAL'>, <TokenType.VECTOR: 'VECTOR'>, <TokenType.CURRENT_DATETIME: 'CURRENT_DATETIME'>, <TokenType.HSTORE: 'HSTORE'>, <TokenType.OFFSET: 'OFFSET'>, <TokenType.OPERATOR: 'OPERATOR'>, <TokenType.ROWS: 'ROWS'>, <TokenType.STRUCT: 'STRUCT'>, <TokenType.INT256: 'INT256'>, <TokenType.MERGE: 'MERGE'>, <TokenType.LOAD: 'LOAD'>, <TokenType.FOREIGN_KEY: 'FOREIGN_KEY'>, <TokenType.UTINYINT: 'UTINYINT'>, <TokenType.NAME: 'NAME'>, <TokenType.INTERVAL: 'INTERVAL'>, <TokenType.ROLLUP: 'ROLLUP'>, <TokenType.MONEY: 'MONEY'>, <TokenType.NCHAR: 'NCHAR'>, <TokenType.WAREHOUSE: 'WAREHOUSE'>, <TokenType.XML: 'XML'>, <TokenType.COMMENT: 'COMMENT'>, <TokenType.DIV: 'DIV'>, <TokenType.NUMMULTIRANGE: 'NUMMULTIRANGE'>, <TokenType.OBJECT_IDENTIFIER: 'OBJECT_IDENTIFIER'>, <TokenType.DATE: 'DATE'>, <TokenType.LONGBLOB: 'LONGBLOB'>, <TokenType.BOOLEAN: 'BOOLEAN'>, <TokenType.NUMRANGE: 'NUMRANGE'>, <TokenType.PARTITION: 'PARTITION'>, <TokenType.CASE: 'CASE'>, <TokenType.SMALLMONEY: 'SMALLMONEY'>, <TokenType.UBIGINT: 'UBIGINT'>, <TokenType.NULL: 'NULL'>, <TokenType.TSTZRANGE: 'TSTZRANGE'>, <TokenType.IPV4: 'IPV4'>, <TokenType.ANTI: 'ANTI'>, <TokenType.DEFAULT: 'DEFAULT'>, <TokenType.TIMETZ: 'TIMETZ'>, <TokenType.ESCAPE: 'ESCAPE'>, <TokenType.LONGTEXT: 'LONGTEXT'>, <TokenType.SMALLINT: 'SMALLINT'>, <TokenType.ARRAY: 'ARRAY'>, <TokenType.UNIQUEIDENTIFIER: 'UNIQUEIDENTIFIER'>, <TokenType.ROWVERSION: 'ROWVERSION'>, <TokenType.TEXT: 'TEXT'>, <TokenType.DESC: 'DESC'>, <TokenType.DELETE: 'DELETE'>, <TokenType.TINYTEXT: 'TINYTEXT'>, <TokenType.COMMIT: 'COMMIT'>, <TokenType.TINYINT: 'TINYINT'>, <TokenType.ROW: 'ROW'>, <TokenType.ISNULL: 'ISNULL'>, <TokenType.VARBINARY: 'VARBINARY'>, <TokenType.TSMULTIRANGE: 'TSMULTIRANGE'>, <TokenType.NATURAL: 'NATURAL'>, <TokenType.DATE32: 'DATE32'>, <TokenType.DATABASE: 'DATABASE'>, <TokenType.ALL: 'ALL'>, <TokenType.WINDOW: 'WINDOW'>, <TokenType.INET: 'INET'>, <TokenType.INT4MULTIRANGE: 'INT4MULTIRANGE'>, <TokenType.CUBE: 'CUBE'>, <TokenType.SET: 'SET'>, <TokenType.SEQUENCE: 'SEQUENCE'>, <TokenType.SHOW: 'SHOW'>, <TokenType.IPADDRESS: 'IPADDRESS'>, <TokenType.CACHE: 'CACHE'>, <TokenType.UNPIVOT: 'UNPIVOT'>, <TokenType.DECIMAL: 'DECIMAL'>, <TokenType.DATERANGE: 'DATERANGE'>, <TokenType.FULL: 'FULL'>, <TokenType.TIMESTAMPLTZ: 'TIMESTAMPLTZ'>, <TokenType.TIMESTAMP_NS: 'TIMESTAMP_NS'>, <TokenType.TRUE: 'TRUE'>, <TokenType.SIMPLEAGGREGATEFUNCTION: 'SIMPLEAGGREGATEFUNCTION'>, <TokenType.IDENTIFIER: 'IDENTIFIER'>, <TokenType.FORMAT: 'FORMAT'>, <TokenType.DICTIONARY: 'DICTIONARY'>, <TokenType.CURRENT_USER: 'CURRENT_USER'>, <TokenType.TRUNCATE: 'TRUNCATE'>, <TokenType.RENAME: 'RENAME'>, <TokenType.SETTINGS: 'SETTINGS'>, <TokenType.VOLATILE: 'VOLATILE'>}</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">" AS "</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">-></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">"TABLESAMPLE"</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">"size"</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">"method"</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">"RESERVOIR"</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">"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, "</span> -</span><span id="DuckDB.Generator-769"><a href="#DuckDB.Generator-769"><span class="linenos">769</span></a> <span class="s2">"defaulting to reservoir sampling"</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">"method"</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">"RESERVOIR"</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">-></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">"unit"</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">"week"</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">"quarter"</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">-></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">"TABLESAMPLE"</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">"size"</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">"method"</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">"RESERVOIR"</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">"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, "</span> +</span><span id="DuckDB.Generator-768"><a href="#DuckDB.Generator-768"><span class="linenos">768</span></a> <span class="s2">"defaulting to reservoir sampling"</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">"method"</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">"RESERVOIR"</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">-></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">"unit"</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">"week"</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">"quarter"</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">"(</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">'DAY'</span><span class="p">)))</span><span class="si">}</span><span class="s2">)"</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">"(</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">'DAY'</span><span class="p">)))</span><span class="si">}</span><span class="s2">)"</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">" "</span><span class="p">)</span> <span class="o">-></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">"this"</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">-></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">"LEFT"</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">"on"</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'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">-></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) -> [a, b], RANGE(a, b) -> [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">"is_end_exclusive"</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">"RANGE"</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">-></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">"returns_list_for_maps"</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">" "</span><span class="p">)</span> <span class="o">-></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">"this"</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">-></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">"LEFT"</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">"on"</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'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">-></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) -> [a, b], RANGE(a, b) -> [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">"is_end_exclusive"</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">"RANGE"</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">-></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">"returns_list_for_maps"</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">"(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]"</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">"(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]"</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">-></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">"expression"</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">-></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">"expression"</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">"expression"</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">"this"</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">"this"</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">")"</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">"</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">)"</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">"expression"</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">"this"</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">"this"</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">")"</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">"</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">)"</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">-></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">-></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">"binary"</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">"LENGTH"</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">"binary"</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">"LENGTH"</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">"LENGTH"</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">"LENGTH"</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'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">"TYPEOF"</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">"'VARCHAR'"</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">"LENGTH"</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">"'BLOB'"</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">"OCTET_LENGTH"</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">-></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">"key"</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">""</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">"value"</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">"</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">"</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">"STRUCT_PACK"</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">"STRUCT_INSERT"</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">-></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">"explode_array"</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 & 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 "FROM UNNEST(...)" to "FROM (SELECT UNNEST(..., max_depth => 2))"</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">"max_depth"</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'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">"alias"</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">"alias"</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">"columns"</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'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">"TYPEOF"</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">"'VARCHAR'"</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">"LENGTH"</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">"'BLOB'"</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">"OCTET_LENGTH"</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">-></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">"key"</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">""</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">"value"</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">"</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">"</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">"STRUCT_PACK"</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">"STRUCT_INSERT"</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">-></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">"explode_array"</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 & 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 "FROM UNNEST(...)" to "FROM (SELECT UNNEST(..., max_depth => 2))"</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">"max_depth"</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'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">"alias"</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">"alias"</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">"columns"</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">{<class '<a href="../expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>'>, <class '<a href="../expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>'>, <class '<a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>'>, <class '<a href="../expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>'>}</span> + <label class="view-value-button pdoc-button" for="DuckDB.Generator.SUPPORTED_JSON_PATH_PARTS-view-value"></label><span class="default_value">{<class '<a href="../expressions.html#JSONPathKey">sqlglot.expressions.JSONPathKey</a>'>, <class '<a href="../expressions.html#JSONPathWildcard">sqlglot.expressions.JSONPathWildcard</a>'>, <class '<a href="../expressions.html#JSONPathRoot">sqlglot.expressions.JSONPathRoot</a>'>, <class '<a href="../expressions.html#JSONPathSubscript">sqlglot.expressions.JSONPathSubscript</a>'>}</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">{'from', 'else', 'user', 'unique', 'union', 'cast', 'then', 'current_timestamp', 'as', 'offset', 'using', 'localtimestamp', 'with', 'and', 'trailing', 'table', 'distinct', 'or', 'for', 'primary', 'asymmetric', 'create_p', 'do', 'some', 'except', 'variadic', 'end_p', 'intersect', 'in_p', 'when', 'where', 'false_p', 'window', 'returning', 'both', 'group_p', 'all', 'desc_p', 'placing', 'current_catalog', 'analyse', 'initially', 'true_p', 'check_p', 'not', 'select', 'on', 'limit', 'column', 'current_time', 'having', 'current_date', 'current_user', 'current_role', 'session_user', 'analyze', 'localtime', 'fetch', 'order', 'array', 'asc_p', 'foreign', 'collate', 'any', 'grant', 'leading', 'constraint', 'case', 'symmetric', 'deferrable', 'null_p', 'references', 'only', 'default', 'lateral_p', 'to', 'into'}</span> + <label class="view-value-button pdoc-button" for="DuckDB.Generator.RESERVED_KEYWORDS-view-value"></label><span class="default_value">{'end_p', 'cast', 'check_p', 'where', 'all', 'do', 'desc_p', 'both', 'in_p', 'asymmetric', 'offset', 'analyze', 'deferrable', 'into', 'and', 'window', 'or', 'analyse', 'lateral_p', 'not', 'fetch', 'current_date', 'primary', 'current_role', 'trailing', 'on', 'from', 'session_user', 'current_user', 'using', 'localtime', 'placing', 'initially', 'asc_p', 'unique', 'grant', 'constraint', 'as', 'only', 'null_p', 'references', 'create_p', 'intersect', 'then', 'when', 'false_p', 'for', 'limit', 'any', 'table', 'default', 'symmetric', 'having', 'true_p', 'distinct', 'except', 'else', 'leading', 'variadic', 'to', 'case', 'order', 'current_catalog', 'column', 'localtimestamp', 'collate', 'with', 'some', 'current_time', 'user', 'current_timestamp', 'select', 'array', 'foreign', 'union', 'returning', 'group_p'}</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">' AS '</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">" AS "</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">-></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">"TABLESAMPLE"</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">"size"</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">"method"</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">"RESERVOIR"</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">"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, "</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">"defaulting to reservoir sampling"</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">"method"</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">"RESERVOIR"</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">-></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">"TABLESAMPLE"</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">"size"</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">"method"</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">"RESERVOIR"</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">"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, "</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">"defaulting to reservoir sampling"</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">"method"</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">"RESERVOIR"</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">-></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">"unit"</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">"week"</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">"quarter"</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">-></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">"unit"</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">"week"</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">"quarter"</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">"(</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">'DAY'</span><span class="p">)))</span><span class="si">}</span><span class="s2">)"</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">"(</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">'DAY'</span><span class="p">)))</span><span class="si">}</span><span class="s2">)"</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">" "</span><span class="p">)</span> <span class="o">-></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">"this"</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">" "</span><span class="p">)</span> <span class="o">-></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">"this"</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">-></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">"LEFT"</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">"on"</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'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">-></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">"LEFT"</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">"on"</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'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">-></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) -> [a, b], RANGE(a, b) -> [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">"is_end_exclusive"</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">"RANGE"</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">-></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) -> [a, b], RANGE(a, b) -> [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">"is_end_exclusive"</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">"RANGE"</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">-></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">"returns_list_for_maps"</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">-></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">"returns_list_for_maps"</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">"(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]"</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">"(</span><span class="si">{</span><span class="n">bracket</span><span class="si">}</span><span class="s2">)[1]"</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">-></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">"expression"</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">"expression"</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">"this"</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">"this"</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">")"</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">"</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">)"</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">-></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">"expression"</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">"expression"</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">"this"</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">"this"</span><span class="p">)</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="s2">")"</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">"</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">)"</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">-></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">"binary"</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">"LENGTH"</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">-></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">"binary"</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">"LENGTH"</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">"LENGTH"</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">"LENGTH"</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'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">"TYPEOF"</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">"'VARCHAR'"</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">"LENGTH"</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">"'BLOB'"</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">"OCTET_LENGTH"</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'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">"TYPEOF"</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">"'VARCHAR'"</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">"LENGTH"</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">"'BLOB'"</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">"OCTET_LENGTH"</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">-></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">"key"</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">""</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">"value"</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">"</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">"</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">"STRUCT_PACK"</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">"STRUCT_INSERT"</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">-></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">"key"</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">""</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">"value"</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">"</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">"</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">"STRUCT_PACK"</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">"STRUCT_INSERT"</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">-></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">"explode_array"</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 & 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 "FROM UNNEST(...)" to "FROM (SELECT UNNEST(..., max_depth => 2))"</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">"max_depth"</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'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">"alias"</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">"alias"</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">"columns"</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">-></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">"explode_array"</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 & 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 "FROM UNNEST(...)" to "FROM (SELECT UNNEST(..., max_depth => 2))"</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">"max_depth"</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'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">"alias"</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">"alias"</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">"columns"</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> |