summaryrefslogtreecommitdiffstats
path: root/docs/sqlglot/optimizer/eliminate_ctes.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/sqlglot/optimizer/eliminate_ctes.html')
-rw-r--r--docs/sqlglot/optimizer/eliminate_ctes.html86
1 files changed, 44 insertions, 42 deletions
diff --git a/docs/sqlglot/optimizer/eliminate_ctes.html b/docs/sqlglot/optimizer/eliminate_ctes.html
index 3b66f78..afa0f09 100644
--- a/docs/sqlglot/optimizer/eliminate_ctes.html
+++ b/docs/sqlglot/optimizer/eliminate_ctes.html
@@ -77,27 +77,28 @@
</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a> <span class="n">root</span> <span class="o">=</span> <span class="n">build_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a>
-</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a> <span class="n">ref_count</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">ref_count</span><span class="p">()</span>
-</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a>
-</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a> <span class="c1"># Traverse the scope tree in reverse so we can remove chains of unused CTEs</span>
-</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">traverse</span><span class="p">())):</span>
-</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a> <span class="k">if</span> <span class="n">scope</span><span class="o">.</span><span class="n">is_cte</span><span class="p">:</span>
-</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a> <span class="n">count</span> <span class="o">=</span> <span class="n">ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">scope</span><span class="p">)]</span>
-</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="k">if</span> <span class="n">count</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="n">cte_node</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="n">with_node</span> <span class="o">=</span> <span class="n">cte_node</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="n">cte_node</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a>
-</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a> <span class="c1"># Pop the entire WITH clause if this is the last CTE</span>
-</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">with_node</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="n">with_node</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a>
-</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a> <span class="c1"># Decrement the ref count for all sources this CTE selects from</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> <span class="n">ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">source</span><span class="p">)]</span> <span class="o">-=</span> <span class="mi">1</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a>
-</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a> <span class="k">if</span> <span class="n">root</span><span class="p">:</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a> <span class="n">ref_count</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">ref_count</span><span class="p">()</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a>
+</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a> <span class="c1"># Traverse the scope tree in reverse so we can remove chains of unused CTEs</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">traverse</span><span class="p">())):</span>
+</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a> <span class="k">if</span> <span class="n">scope</span><span class="o">.</span><span class="n">is_cte</span><span class="p">:</span>
+</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a> <span class="n">count</span> <span class="o">=</span> <span class="n">ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">scope</span><span class="p">)]</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a> <span class="k">if</span> <span class="n">count</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a> <span class="n">cte_node</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a> <span class="n">with_node</span> <span class="o">=</span> <span class="n">cte_node</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a> <span class="n">cte_node</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a>
+</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a> <span class="c1"># Pop the entire WITH clause if this is the last CTE</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">with_node</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a> <span class="n">with_node</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a>
+</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a> <span class="c1"># Decrement the ref count for all sources this CTE selects from</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a> <span class="n">ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">source</span><span class="p">)]</span> <span class="o">-=</span> <span class="mi">1</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a>
+</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>
@@ -131,27 +132,28 @@
</span><span id="eliminate_ctes-20"><a href="#eliminate_ctes-20"><span class="linenos">20</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="eliminate_ctes-21"><a href="#eliminate_ctes-21"><span class="linenos">21</span></a> <span class="n">root</span> <span class="o">=</span> <span class="n">build_scope</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="eliminate_ctes-22"><a href="#eliminate_ctes-22"><span class="linenos">22</span></a>
-</span><span id="eliminate_ctes-23"><a href="#eliminate_ctes-23"><span class="linenos">23</span></a> <span class="n">ref_count</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">ref_count</span><span class="p">()</span>
-</span><span id="eliminate_ctes-24"><a href="#eliminate_ctes-24"><span class="linenos">24</span></a>
-</span><span id="eliminate_ctes-25"><a href="#eliminate_ctes-25"><span class="linenos">25</span></a> <span class="c1"># Traverse the scope tree in reverse so we can remove chains of unused CTEs</span>
-</span><span id="eliminate_ctes-26"><a href="#eliminate_ctes-26"><span class="linenos">26</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">traverse</span><span class="p">())):</span>
-</span><span id="eliminate_ctes-27"><a href="#eliminate_ctes-27"><span class="linenos">27</span></a> <span class="k">if</span> <span class="n">scope</span><span class="o">.</span><span class="n">is_cte</span><span class="p">:</span>
-</span><span id="eliminate_ctes-28"><a href="#eliminate_ctes-28"><span class="linenos">28</span></a> <span class="n">count</span> <span class="o">=</span> <span class="n">ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">scope</span><span class="p">)]</span>
-</span><span id="eliminate_ctes-29"><a href="#eliminate_ctes-29"><span class="linenos">29</span></a> <span class="k">if</span> <span class="n">count</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="eliminate_ctes-30"><a href="#eliminate_ctes-30"><span class="linenos">30</span></a> <span class="n">cte_node</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="eliminate_ctes-31"><a href="#eliminate_ctes-31"><span class="linenos">31</span></a> <span class="n">with_node</span> <span class="o">=</span> <span class="n">cte_node</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="eliminate_ctes-32"><a href="#eliminate_ctes-32"><span class="linenos">32</span></a> <span class="n">cte_node</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="eliminate_ctes-33"><a href="#eliminate_ctes-33"><span class="linenos">33</span></a>
-</span><span id="eliminate_ctes-34"><a href="#eliminate_ctes-34"><span class="linenos">34</span></a> <span class="c1"># Pop the entire WITH clause if this is the last CTE</span>
-</span><span id="eliminate_ctes-35"><a href="#eliminate_ctes-35"><span class="linenos">35</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">with_node</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="eliminate_ctes-36"><a href="#eliminate_ctes-36"><span class="linenos">36</span></a> <span class="n">with_node</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="eliminate_ctes-37"><a href="#eliminate_ctes-37"><span class="linenos">37</span></a>
-</span><span id="eliminate_ctes-38"><a href="#eliminate_ctes-38"><span class="linenos">38</span></a> <span class="c1"># Decrement the ref count for all sources this CTE selects from</span>
-</span><span id="eliminate_ctes-39"><a href="#eliminate_ctes-39"><span class="linenos">39</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
-</span><span id="eliminate_ctes-40"><a href="#eliminate_ctes-40"><span class="linenos">40</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
-</span><span id="eliminate_ctes-41"><a href="#eliminate_ctes-41"><span class="linenos">41</span></a> <span class="n">ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">source</span><span class="p">)]</span> <span class="o">-=</span> <span class="mi">1</span>
-</span><span id="eliminate_ctes-42"><a href="#eliminate_ctes-42"><span class="linenos">42</span></a>
-</span><span id="eliminate_ctes-43"><a href="#eliminate_ctes-43"><span class="linenos">43</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="eliminate_ctes-23"><a href="#eliminate_ctes-23"><span class="linenos">23</span></a> <span class="k">if</span> <span class="n">root</span><span class="p">:</span>
+</span><span id="eliminate_ctes-24"><a href="#eliminate_ctes-24"><span class="linenos">24</span></a> <span class="n">ref_count</span> <span class="o">=</span> <span class="n">root</span><span class="o">.</span><span class="n">ref_count</span><span class="p">()</span>
+</span><span id="eliminate_ctes-25"><a href="#eliminate_ctes-25"><span class="linenos">25</span></a>
+</span><span id="eliminate_ctes-26"><a href="#eliminate_ctes-26"><span class="linenos">26</span></a> <span class="c1"># Traverse the scope tree in reverse so we can remove chains of unused CTEs</span>
+</span><span id="eliminate_ctes-27"><a href="#eliminate_ctes-27"><span class="linenos">27</span></a> <span class="k">for</span> <span class="n">scope</span> <span class="ow">in</span> <span class="nb">reversed</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">root</span><span class="o">.</span><span class="n">traverse</span><span class="p">())):</span>
+</span><span id="eliminate_ctes-28"><a href="#eliminate_ctes-28"><span class="linenos">28</span></a> <span class="k">if</span> <span class="n">scope</span><span class="o">.</span><span class="n">is_cte</span><span class="p">:</span>
+</span><span id="eliminate_ctes-29"><a href="#eliminate_ctes-29"><span class="linenos">29</span></a> <span class="n">count</span> <span class="o">=</span> <span class="n">ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">scope</span><span class="p">)]</span>
+</span><span id="eliminate_ctes-30"><a href="#eliminate_ctes-30"><span class="linenos">30</span></a> <span class="k">if</span> <span class="n">count</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="eliminate_ctes-31"><a href="#eliminate_ctes-31"><span class="linenos">31</span></a> <span class="n">cte_node</span> <span class="o">=</span> <span class="n">scope</span><span class="o">.</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="eliminate_ctes-32"><a href="#eliminate_ctes-32"><span class="linenos">32</span></a> <span class="n">with_node</span> <span class="o">=</span> <span class="n">cte_node</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="eliminate_ctes-33"><a href="#eliminate_ctes-33"><span class="linenos">33</span></a> <span class="n">cte_node</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="eliminate_ctes-34"><a href="#eliminate_ctes-34"><span class="linenos">34</span></a>
+</span><span id="eliminate_ctes-35"><a href="#eliminate_ctes-35"><span class="linenos">35</span></a> <span class="c1"># Pop the entire WITH clause if this is the last CTE</span>
+</span><span id="eliminate_ctes-36"><a href="#eliminate_ctes-36"><span class="linenos">36</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">with_node</span><span class="o">.</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="eliminate_ctes-37"><a href="#eliminate_ctes-37"><span class="linenos">37</span></a> <span class="n">with_node</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="eliminate_ctes-38"><a href="#eliminate_ctes-38"><span class="linenos">38</span></a>
+</span><span id="eliminate_ctes-39"><a href="#eliminate_ctes-39"><span class="linenos">39</span></a> <span class="c1"># Decrement the ref count for all sources this CTE selects from</span>
+</span><span id="eliminate_ctes-40"><a href="#eliminate_ctes-40"><span class="linenos">40</span></a> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">source</span> <span class="ow">in</span> <span class="n">scope</span><span class="o">.</span><span class="n">selected_sources</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
+</span><span id="eliminate_ctes-41"><a href="#eliminate_ctes-41"><span class="linenos">41</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">Scope</span><span class="p">):</span>
+</span><span id="eliminate_ctes-42"><a href="#eliminate_ctes-42"><span class="linenos">42</span></a> <span class="n">ref_count</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="n">source</span><span class="p">)]</span> <span class="o">-=</span> <span class="mi">1</span>
+</span><span id="eliminate_ctes-43"><a href="#eliminate_ctes-43"><span class="linenos">43</span></a>
+</span><span id="eliminate_ctes-44"><a href="#eliminate_ctes-44"><span class="linenos">44</span></a> <span class="k">return</span> <span class="n">expression</span>
</span></pre></div>