1
0
Fork 0

Adding upstream version 25.5.1.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-13 21:41:00 +01:00
parent 147b6e06e8
commit 4e506fbac7
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
136 changed files with 80990 additions and 72541 deletions

View file

@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="generator" content="pdoc 14.5.0"/>
<meta name="generator" content="pdoc 14.5.1"/>
<title>sqlglot.optimizer.scope API documentation</title>
<style>/*! * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */*,::after,::before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width:1200px){h1{font-size:2.5rem}}h2{font-size:calc(1.325rem + .9vw)}@media (min-width:1200px){h2{font-size:2rem}}h3{font-size:calc(1.3rem + .6vw)}@media (min-width:1200px){h3{font-size:1.75rem}}h4{font-size:calc(1.275rem + .3vw)}@media (min-width:1200px){h4{font-size:1.5rem}}h5{font-size:1.25rem}h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[data-bs-original-title],abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:.875em}mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em;direction:ltr;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width:1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-text,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none!important}</style>
@ -273,7 +273,7 @@
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a><span class="sd"> Selection scope.</span>
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a>
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a><span class="sd"> Attributes:</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a><span class="sd"> expression (exp.Select|exp.Union): Root expression of this scope</span>
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a><span class="sd"> expression (exp.Select|exp.SetOperation): Root expression of this scope</span>
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a><span class="sd"> sources (dict[str, exp.Table|Scope]): Mapping of source name to either</span>
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a><span class="sd"> a Table expression or another Scope instance. For example:</span>
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a><span class="sd"> SELECT * FROM x {&quot;x&quot;: Table(this=&quot;x&quot;)}</span>
@ -477,7 +477,7 @@
</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a><span class="sd"> SELECT * FROM x WHERE a IN (SELECT ...) &lt;- that&#39;s a subquery</span>
</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a>
</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a><span class="sd"> Returns:</span>
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a><span class="sd"> list[exp.Select | exp.Union]: subqueries</span>
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a><span class="sd"> list[exp.Select | exp.SetOperation]: subqueries</span>
</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_subqueries</span>
@ -583,7 +583,7 @@
</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a><span class="sd"> sources in the current scope.</span>
</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetOperation</span><span class="p">):</span>
</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a> <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">union_scopes</span>
</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</span> <span class="o">=</span> <span class="n">left</span><span class="o">.</span><span class="n">external_columns</span> <span class="o">+</span> <span class="n">right</span><span class="o">.</span><span class="n">external_columns</span>
</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a> <span class="k">else</span><span class="p">:</span>
@ -779,7 +779,7 @@
</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a>
</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a> <span class="k">yield from</span> <span class="n">_traverse_select</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetOperation</span><span class="p">):</span>
</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a> <span class="k">yield from</span> <span class="n">_traverse_ctes</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a> <span class="k">yield from</span> <span class="n">_traverse_union</span><span class="p">(</span><span class="n">scope</span><span class="p">)</span>
</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a> <span class="k">return</span>
@ -832,7 +832,7 @@
</span><span id="L-588"><a href="#L-588"><span class="linenos">588</span></a> <span class="n">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">UNION</span><span class="p">,</span>
</span><span id="L-589"><a href="#L-589"><span class="linenos">589</span></a> <span class="p">)</span>
</span><span id="L-590"><a href="#L-590"><span class="linenos">590</span></a>
</span><span id="L-591"><a href="#L-591"><span class="linenos">591</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
</span><span id="L-591"><a href="#L-591"><span class="linenos">591</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetOperation</span><span class="p">):</span>
</span><span id="L-592"><a href="#L-592"><span class="linenos">592</span></a> <span class="k">yield from</span> <span class="n">_traverse_ctes</span><span class="p">(</span><span class="n">new_scope</span><span class="p">)</span>
</span><span id="L-593"><a href="#L-593"><span class="linenos">593</span></a>
</span><span id="L-594"><a href="#L-594"><span class="linenos">594</span></a> <span class="n">union_scope_stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">new_scope</span><span class="p">)</span>
@ -864,7 +864,7 @@
</span><span id="L-620"><a href="#L-620"><span class="linenos">620</span></a> <span class="k">if</span> <span class="n">with_</span> <span class="ow">and</span> <span class="n">with_</span><span class="o">.</span><span class="n">recursive</span><span class="p">:</span>
</span><span id="L-621"><a href="#L-621"><span class="linenos">621</span></a> <span class="n">union</span> <span class="o">=</span> <span class="n">cte</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-622"><a href="#L-622"><span class="linenos">622</span></a>
</span><span id="L-623"><a href="#L-623"><span class="linenos">623</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">union</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
</span><span id="L-623"><a href="#L-623"><span class="linenos">623</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">union</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetOperation</span><span class="p">):</span>
</span><span id="L-624"><a href="#L-624"><span class="linenos">624</span></a> <span class="n">sources</span><span class="p">[</span><span class="n">cte_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">branch</span><span class="p">(</span><span class="n">union</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">scope_type</span><span class="o">=</span><span class="n">ScopeType</span><span class="o">.</span><span class="n">CTE</span><span class="p">)</span>
</span><span id="L-625"><a href="#L-625"><span class="linenos">625</span></a>
</span><span id="L-626"><a href="#L-626"><span class="linenos">626</span></a> <span class="n">child_scope</span> <span class="o">=</span> <span class="kc">None</span>
@ -1252,7 +1252,7 @@
</span><span id="Scope-30"><a href="#Scope-30"><span class="linenos"> 30</span></a><span class="sd"> Selection scope.</span>
</span><span id="Scope-31"><a href="#Scope-31"><span class="linenos"> 31</span></a>
</span><span id="Scope-32"><a href="#Scope-32"><span class="linenos"> 32</span></a><span class="sd"> Attributes:</span>
</span><span id="Scope-33"><a href="#Scope-33"><span class="linenos"> 33</span></a><span class="sd"> expression (exp.Select|exp.Union): Root expression of this scope</span>
</span><span id="Scope-33"><a href="#Scope-33"><span class="linenos"> 33</span></a><span class="sd"> expression (exp.Select|exp.SetOperation): Root expression of this scope</span>
</span><span id="Scope-34"><a href="#Scope-34"><span class="linenos"> 34</span></a><span class="sd"> sources (dict[str, exp.Table|Scope]): Mapping of source name to either</span>
</span><span id="Scope-35"><a href="#Scope-35"><span class="linenos"> 35</span></a><span class="sd"> a Table expression or another Scope instance. For example:</span>
</span><span id="Scope-36"><a href="#Scope-36"><span class="linenos"> 36</span></a><span class="sd"> SELECT * FROM x {&quot;x&quot;: Table(this=&quot;x&quot;)}</span>
@ -1456,7 +1456,7 @@
</span><span id="Scope-234"><a href="#Scope-234"><span class="linenos">234</span></a><span class="sd"> SELECT * FROM x WHERE a IN (SELECT ...) &lt;- that&#39;s a subquery</span>
</span><span id="Scope-235"><a href="#Scope-235"><span class="linenos">235</span></a>
</span><span id="Scope-236"><a href="#Scope-236"><span class="linenos">236</span></a><span class="sd"> Returns:</span>
</span><span id="Scope-237"><a href="#Scope-237"><span class="linenos">237</span></a><span class="sd"> list[exp.Select | exp.Union]: subqueries</span>
</span><span id="Scope-237"><a href="#Scope-237"><span class="linenos">237</span></a><span class="sd"> list[exp.Select | exp.SetOperation]: subqueries</span>
</span><span id="Scope-238"><a href="#Scope-238"><span class="linenos">238</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Scope-239"><a href="#Scope-239"><span class="linenos">239</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
</span><span id="Scope-240"><a href="#Scope-240"><span class="linenos">240</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_subqueries</span>
@ -1562,7 +1562,7 @@
</span><span id="Scope-340"><a href="#Scope-340"><span class="linenos">340</span></a><span class="sd"> sources in the current scope.</span>
</span><span id="Scope-341"><a href="#Scope-341"><span class="linenos">341</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Scope-342"><a href="#Scope-342"><span class="linenos">342</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Scope-343"><a href="#Scope-343"><span class="linenos">343</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
</span><span id="Scope-343"><a href="#Scope-343"><span class="linenos">343</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetOperation</span><span class="p">):</span>
</span><span id="Scope-344"><a href="#Scope-344"><span class="linenos">344</span></a> <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">union_scopes</span>
</span><span id="Scope-345"><a href="#Scope-345"><span class="linenos">345</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</span> <span class="o">=</span> <span class="n">left</span><span class="o">.</span><span class="n">external_columns</span> <span class="o">+</span> <span class="n">right</span><span class="o">.</span><span class="n">external_columns</span>
</span><span id="Scope-346"><a href="#Scope-346"><span class="linenos">346</span></a> <span class="k">else</span><span class="p">:</span>
@ -1715,7 +1715,7 @@
<h6 id="attributes">Attributes:</h6>
<ul>
<li><strong>expression (exp.Select|exp.Union):</strong> Root expression of this scope</li>
<li><strong>expression (exp.Select|exp.SetOperation):</strong> Root expression of this scope</li>
<li><strong>sources (dict[str, exp.Table|Scope]):</strong> Mapping of source name to either
a Table expression or another Scope instance. For example:
SELECT * FROM x {"x": Table(this="x")}
@ -2249,7 +2249,7 @@ a list of the left and right child scopes.</li>
</span><span id="Scope.subqueries-234"><a href="#Scope.subqueries-234"><span class="linenos">234</span></a><span class="sd"> SELECT * FROM x WHERE a IN (SELECT ...) &lt;- that&#39;s a subquery</span>
</span><span id="Scope.subqueries-235"><a href="#Scope.subqueries-235"><span class="linenos">235</span></a>
</span><span id="Scope.subqueries-236"><a href="#Scope.subqueries-236"><span class="linenos">236</span></a><span class="sd"> Returns:</span>
</span><span id="Scope.subqueries-237"><a href="#Scope.subqueries-237"><span class="linenos">237</span></a><span class="sd"> list[exp.Select | exp.Union]: subqueries</span>
</span><span id="Scope.subqueries-237"><a href="#Scope.subqueries-237"><span class="linenos">237</span></a><span class="sd"> list[exp.Select | exp.SetOperation]: subqueries</span>
</span><span id="Scope.subqueries-238"><a href="#Scope.subqueries-238"><span class="linenos">238</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Scope.subqueries-239"><a href="#Scope.subqueries-239"><span class="linenos">239</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_ensure_collected</span><span class="p">()</span>
</span><span id="Scope.subqueries-240"><a href="#Scope.subqueries-240"><span class="linenos">240</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_subqueries</span>
@ -2267,7 +2267,7 @@ a list of the left and right child scopes.</li>
<h6 id="returns">Returns:</h6>
<blockquote>
<p>list[exp.Select | exp.Union]: subqueries</p>
<p>list[exp.Select | exp.SetOperation]: subqueries</p>
</blockquote>
</div>
@ -2461,7 +2461,7 @@ table only becomes a selected source if it's included in a FROM or JOIN clause.<
</span><span id="Scope.external_columns-340"><a href="#Scope.external_columns-340"><span class="linenos">340</span></a><span class="sd"> sources in the current scope.</span>
</span><span id="Scope.external_columns-341"><a href="#Scope.external_columns-341"><span class="linenos">341</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Scope.external_columns-342"><a href="#Scope.external_columns-342"><span class="linenos">342</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
</span><span id="Scope.external_columns-343"><a href="#Scope.external_columns-343"><span class="linenos">343</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span><span class="p">):</span>
</span><span id="Scope.external_columns-343"><a href="#Scope.external_columns-343"><span class="linenos">343</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">SetOperation</span><span class="p">):</span>
</span><span id="Scope.external_columns-344"><a href="#Scope.external_columns-344"><span class="linenos">344</span></a> <span class="n">left</span><span class="p">,</span> <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">union_scopes</span>
</span><span id="Scope.external_columns-345"><a href="#Scope.external_columns-345"><span class="linenos">345</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_external_columns</span> <span class="o">=</span> <span class="n">left</span><span class="o">.</span><span class="n">external_columns</span> <span class="o">+</span> <span class="n">right</span><span class="o">.</span><span class="n">external_columns</span>
</span><span id="Scope.external_columns-346"><a href="#Scope.external_columns-346"><span class="linenos">346</span></a> <span class="k">else</span><span class="p">:</span>