summaryrefslogtreecommitdiffstats
path: root/docs/sqlglot/parser.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/sqlglot/parser.html')
-rw-r--r--docs/sqlglot/parser.html12916
1 files changed, 6471 insertions, 6445 deletions
diff --git a/docs/sqlglot/parser.html b/docs/sqlglot/parser.html
index ebc3c62..1dcdc17 100644
--- a/docs/sqlglot/parser.html
+++ b/docs/sqlglot/parser.html
@@ -2847,3361 +2847,3374 @@
</span><span id="L-2465"><a href="#L-2465"><span class="linenos">2465</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="L-2466"><a href="#L-2466"><span class="linenos">2466</span></a> <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;limit&quot;</span><span class="p">:</span>
</span><span id="L-2467"><a href="#L-2467"><span class="linenos">2467</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-2468"><a href="#L-2468"><span class="linenos">2468</span></a> <span class="k">if</span> <span class="n">offset</span><span class="p">:</span>
-</span><span id="L-2469"><a href="#L-2469"><span class="linenos">2469</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">offset</span><span class="p">))</span>
-</span><span id="L-2470"><a href="#L-2470"><span class="linenos">2470</span></a> <span class="k">continue</span>
-</span><span id="L-2471"><a href="#L-2471"><span class="linenos">2471</span></a> <span class="k">break</span>
-</span><span id="L-2472"><a href="#L-2472"><span class="linenos">2472</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-2473"><a href="#L-2473"><span class="linenos">2473</span></a>
-</span><span id="L-2474"><a href="#L-2474"><span class="linenos">2474</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
-</span><span id="L-2475"><a href="#L-2475"><span class="linenos">2475</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
-</span><span id="L-2476"><a href="#L-2476"><span class="linenos">2476</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-2477"><a href="#L-2477"><span class="linenos">2477</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">),</span> <span class="p">[]):</span>
-</span><span id="L-2478"><a href="#L-2478"><span class="linenos">2478</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="L-2468"><a href="#L-2468"><span class="linenos">2468</span></a>
+</span><span id="L-2469"><a href="#L-2469"><span class="linenos">2469</span></a> <span class="k">if</span> <span class="n">offset</span><span class="p">:</span>
+</span><span id="L-2470"><a href="#L-2470"><span class="linenos">2470</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
+</span><span id="L-2471"><a href="#L-2471"><span class="linenos">2471</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+</span><span id="L-2472"><a href="#L-2472"><span class="linenos">2472</span></a>
+</span><span id="L-2473"><a href="#L-2473"><span class="linenos">2473</span></a> <span class="n">limit_by_expressions</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="L-2474"><a href="#L-2474"><span class="linenos">2474</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-2475"><a href="#L-2475"><span class="linenos">2475</span></a> <span class="n">offset</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">limit_by_expressions</span><span class="p">)</span>
+</span><span id="L-2476"><a href="#L-2476"><span class="linenos">2476</span></a> <span class="k">continue</span>
+</span><span id="L-2477"><a href="#L-2477"><span class="linenos">2477</span></a> <span class="k">break</span>
+</span><span id="L-2478"><a href="#L-2478"><span class="linenos">2478</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-2479"><a href="#L-2479"><span class="linenos">2479</span></a>
-</span><span id="L-2480"><a href="#L-2480"><span class="linenos">2480</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
-</span><span id="L-2481"><a href="#L-2481"><span class="linenos">2481</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
-</span><span id="L-2482"><a href="#L-2482"><span class="linenos">2482</span></a>
-</span><span id="L-2483"><a href="#L-2483"><span class="linenos">2483</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">hints</span><span class="p">)</span>
-</span><span id="L-2484"><a href="#L-2484"><span class="linenos">2484</span></a>
-</span><span id="L-2485"><a href="#L-2485"><span class="linenos">2485</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2486"><a href="#L-2486"><span class="linenos">2486</span></a>
-</span><span id="L-2487"><a href="#L-2487"><span class="linenos">2487</span></a> <span class="k">def</span> <span class="nf">_parse_into</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">]:</span>
-</span><span id="L-2488"><a href="#L-2488"><span class="linenos">2488</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">):</span>
-</span><span id="L-2489"><a href="#L-2489"><span class="linenos">2489</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2480"><a href="#L-2480"><span class="linenos">2480</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
+</span><span id="L-2481"><a href="#L-2481"><span class="linenos">2481</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
+</span><span id="L-2482"><a href="#L-2482"><span class="linenos">2482</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2483"><a href="#L-2483"><span class="linenos">2483</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">),</span> <span class="p">[]):</span>
+</span><span id="L-2484"><a href="#L-2484"><span class="linenos">2484</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="L-2485"><a href="#L-2485"><span class="linenos">2485</span></a>
+</span><span id="L-2486"><a href="#L-2486"><span class="linenos">2486</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
+</span><span id="L-2487"><a href="#L-2487"><span class="linenos">2487</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
+</span><span id="L-2488"><a href="#L-2488"><span class="linenos">2488</span></a>
+</span><span id="L-2489"><a href="#L-2489"><span class="linenos">2489</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">hints</span><span class="p">)</span>
</span><span id="L-2490"><a href="#L-2490"><span class="linenos">2490</span></a>
-</span><span id="L-2491"><a href="#L-2491"><span class="linenos">2491</span></a> <span class="n">temp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">)</span>
-</span><span id="L-2492"><a href="#L-2492"><span class="linenos">2492</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)</span>
-</span><span id="L-2493"><a href="#L-2493"><span class="linenos">2493</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
-</span><span id="L-2494"><a href="#L-2494"><span class="linenos">2494</span></a>
-</span><span id="L-2495"><a href="#L-2495"><span class="linenos">2495</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2496"><a href="#L-2496"><span class="linenos">2496</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="n">temporary</span><span class="o">=</span><span class="n">temp</span><span class="p">,</span> <span class="n">unlogged</span><span class="o">=</span><span class="n">unlogged</span>
-</span><span id="L-2497"><a href="#L-2497"><span class="linenos">2497</span></a> <span class="p">)</span>
-</span><span id="L-2498"><a href="#L-2498"><span class="linenos">2498</span></a>
-</span><span id="L-2499"><a href="#L-2499"><span class="linenos">2499</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
-</span><span id="L-2500"><a href="#L-2500"><span class="linenos">2500</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">skip_from_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-2501"><a href="#L-2501"><span class="linenos">2501</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">]:</span>
-</span><span id="L-2502"><a href="#L-2502"><span class="linenos">2502</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_from_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
-</span><span id="L-2503"><a href="#L-2503"><span class="linenos">2503</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2491"><a href="#L-2491"><span class="linenos">2491</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2492"><a href="#L-2492"><span class="linenos">2492</span></a>
+</span><span id="L-2493"><a href="#L-2493"><span class="linenos">2493</span></a> <span class="k">def</span> <span class="nf">_parse_into</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">]:</span>
+</span><span id="L-2494"><a href="#L-2494"><span class="linenos">2494</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">):</span>
+</span><span id="L-2495"><a href="#L-2495"><span class="linenos">2495</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2496"><a href="#L-2496"><span class="linenos">2496</span></a>
+</span><span id="L-2497"><a href="#L-2497"><span class="linenos">2497</span></a> <span class="n">temp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">)</span>
+</span><span id="L-2498"><a href="#L-2498"><span class="linenos">2498</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)</span>
+</span><span id="L-2499"><a href="#L-2499"><span class="linenos">2499</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
+</span><span id="L-2500"><a href="#L-2500"><span class="linenos">2500</span></a>
+</span><span id="L-2501"><a href="#L-2501"><span class="linenos">2501</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2502"><a href="#L-2502"><span class="linenos">2502</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="n">temporary</span><span class="o">=</span><span class="n">temp</span><span class="p">,</span> <span class="n">unlogged</span><span class="o">=</span><span class="n">unlogged</span>
+</span><span id="L-2503"><a href="#L-2503"><span class="linenos">2503</span></a> <span class="p">)</span>
</span><span id="L-2504"><a href="#L-2504"><span class="linenos">2504</span></a>
-</span><span id="L-2505"><a href="#L-2505"><span class="linenos">2505</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2506"><a href="#L-2506"><span class="linenos">2506</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">)</span>
-</span><span id="L-2507"><a href="#L-2507"><span class="linenos">2507</span></a> <span class="p">)</span>
-</span><span id="L-2508"><a href="#L-2508"><span class="linenos">2508</span></a>
-</span><span id="L-2509"><a href="#L-2509"><span class="linenos">2509</span></a> <span class="k">def</span> <span class="nf">_parse_match_recognize</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">]:</span>
-</span><span id="L-2510"><a href="#L-2510"><span class="linenos">2510</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">):</span>
-</span><span id="L-2511"><a href="#L-2511"><span class="linenos">2511</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2512"><a href="#L-2512"><span class="linenos">2512</span></a>
-</span><span id="L-2513"><a href="#L-2513"><span class="linenos">2513</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="L-2505"><a href="#L-2505"><span class="linenos">2505</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
+</span><span id="L-2506"><a href="#L-2506"><span class="linenos">2506</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">skip_from_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-2507"><a href="#L-2507"><span class="linenos">2507</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">]:</span>
+</span><span id="L-2508"><a href="#L-2508"><span class="linenos">2508</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_from_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
+</span><span id="L-2509"><a href="#L-2509"><span class="linenos">2509</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2510"><a href="#L-2510"><span class="linenos">2510</span></a>
+</span><span id="L-2511"><a href="#L-2511"><span class="linenos">2511</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2512"><a href="#L-2512"><span class="linenos">2512</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">)</span>
+</span><span id="L-2513"><a href="#L-2513"><span class="linenos">2513</span></a> <span class="p">)</span>
</span><span id="L-2514"><a href="#L-2514"><span class="linenos">2514</span></a>
-</span><span id="L-2515"><a href="#L-2515"><span class="linenos">2515</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">()</span>
-</span><span id="L-2516"><a href="#L-2516"><span class="linenos">2516</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
-</span><span id="L-2517"><a href="#L-2517"><span class="linenos">2517</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MEASURES&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2515"><a href="#L-2515"><span class="linenos">2515</span></a> <span class="k">def</span> <span class="nf">_parse_match_recognize</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">]:</span>
+</span><span id="L-2516"><a href="#L-2516"><span class="linenos">2516</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">):</span>
+</span><span id="L-2517"><a href="#L-2517"><span class="linenos">2517</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2518"><a href="#L-2518"><span class="linenos">2518</span></a>
-</span><span id="L-2519"><a href="#L-2519"><span class="linenos">2519</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
-</span><span id="L-2520"><a href="#L-2520"><span class="linenos">2520</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
-</span><span id="L-2521"><a href="#L-2521"><span class="linenos">2521</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
-</span><span id="L-2522"><a href="#L-2522"><span class="linenos">2522</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;ALL ROWS PER MATCH&quot;</span>
-</span><span id="L-2523"><a href="#L-2523"><span class="linenos">2523</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SHOW&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
-</span><span id="L-2524"><a href="#L-2524"><span class="linenos">2524</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; SHOW EMPTY MATCHES&quot;</span>
-</span><span id="L-2525"><a href="#L-2525"><span class="linenos">2525</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
-</span><span id="L-2526"><a href="#L-2526"><span class="linenos">2526</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; OMIT EMPTY MATCHES&quot;</span>
-</span><span id="L-2527"><a href="#L-2527"><span class="linenos">2527</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNMATCHED&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
-</span><span id="L-2528"><a href="#L-2528"><span class="linenos">2528</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; WITH UNMATCHED ROWS&quot;</span>
-</span><span id="L-2529"><a href="#L-2529"><span class="linenos">2529</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-2530"><a href="#L-2530"><span class="linenos">2530</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2531"><a href="#L-2531"><span class="linenos">2531</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2532"><a href="#L-2532"><span class="linenos">2532</span></a>
-</span><span id="L-2533"><a href="#L-2533"><span class="linenos">2533</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AFTER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;SKIP&quot;</span><span class="p">):</span>
-</span><span id="L-2534"><a href="#L-2534"><span class="linenos">2534</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
-</span><span id="L-2535"><a href="#L-2535"><span class="linenos">2535</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PAST&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
-</span><span id="L-2536"><a href="#L-2536"><span class="linenos">2536</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; PAST LAST ROW&quot;</span>
-</span><span id="L-2537"><a href="#L-2537"><span class="linenos">2537</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;NEXT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
-</span><span id="L-2538"><a href="#L-2538"><span class="linenos">2538</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; TO NEXT ROW&quot;</span>
-</span><span id="L-2539"><a href="#L-2539"><span class="linenos">2539</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">):</span>
-</span><span id="L-2540"><a href="#L-2540"><span class="linenos">2540</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO FIRST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
-</span><span id="L-2541"><a href="#L-2541"><span class="linenos">2541</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
-</span><span id="L-2542"><a href="#L-2542"><span class="linenos">2542</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO LAST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
-</span><span id="L-2543"><a href="#L-2543"><span class="linenos">2543</span></a> <span class="n">after</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-2544"><a href="#L-2544"><span class="linenos">2544</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2545"><a href="#L-2545"><span class="linenos">2545</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2546"><a href="#L-2546"><span class="linenos">2546</span></a>
-</span><span id="L-2547"><a href="#L-2547"><span class="linenos">2547</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATTERN&quot;</span><span class="p">):</span>
-</span><span id="L-2548"><a href="#L-2548"><span class="linenos">2548</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="L-2549"><a href="#L-2549"><span class="linenos">2549</span></a>
-</span><span id="L-2550"><a href="#L-2550"><span class="linenos">2550</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-2551"><a href="#L-2551"><span class="linenos">2551</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="L-2519"><a href="#L-2519"><span class="linenos">2519</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="L-2520"><a href="#L-2520"><span class="linenos">2520</span></a>
+</span><span id="L-2521"><a href="#L-2521"><span class="linenos">2521</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">()</span>
+</span><span id="L-2522"><a href="#L-2522"><span class="linenos">2522</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
+</span><span id="L-2523"><a href="#L-2523"><span class="linenos">2523</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MEASURES&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2524"><a href="#L-2524"><span class="linenos">2524</span></a>
+</span><span id="L-2525"><a href="#L-2525"><span class="linenos">2525</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
+</span><span id="L-2526"><a href="#L-2526"><span class="linenos">2526</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
+</span><span id="L-2527"><a href="#L-2527"><span class="linenos">2527</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
+</span><span id="L-2528"><a href="#L-2528"><span class="linenos">2528</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;ALL ROWS PER MATCH&quot;</span>
+</span><span id="L-2529"><a href="#L-2529"><span class="linenos">2529</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SHOW&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
+</span><span id="L-2530"><a href="#L-2530"><span class="linenos">2530</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; SHOW EMPTY MATCHES&quot;</span>
+</span><span id="L-2531"><a href="#L-2531"><span class="linenos">2531</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
+</span><span id="L-2532"><a href="#L-2532"><span class="linenos">2532</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; OMIT EMPTY MATCHES&quot;</span>
+</span><span id="L-2533"><a href="#L-2533"><span class="linenos">2533</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNMATCHED&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
+</span><span id="L-2534"><a href="#L-2534"><span class="linenos">2534</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; WITH UNMATCHED ROWS&quot;</span>
+</span><span id="L-2535"><a href="#L-2535"><span class="linenos">2535</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-2536"><a href="#L-2536"><span class="linenos">2536</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2537"><a href="#L-2537"><span class="linenos">2537</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2538"><a href="#L-2538"><span class="linenos">2538</span></a>
+</span><span id="L-2539"><a href="#L-2539"><span class="linenos">2539</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AFTER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;SKIP&quot;</span><span class="p">):</span>
+</span><span id="L-2540"><a href="#L-2540"><span class="linenos">2540</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
+</span><span id="L-2541"><a href="#L-2541"><span class="linenos">2541</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PAST&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
+</span><span id="L-2542"><a href="#L-2542"><span class="linenos">2542</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; PAST LAST ROW&quot;</span>
+</span><span id="L-2543"><a href="#L-2543"><span class="linenos">2543</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;NEXT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
+</span><span id="L-2544"><a href="#L-2544"><span class="linenos">2544</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; TO NEXT ROW&quot;</span>
+</span><span id="L-2545"><a href="#L-2545"><span class="linenos">2545</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">):</span>
+</span><span id="L-2546"><a href="#L-2546"><span class="linenos">2546</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO FIRST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
+</span><span id="L-2547"><a href="#L-2547"><span class="linenos">2547</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
+</span><span id="L-2548"><a href="#L-2548"><span class="linenos">2548</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO LAST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
+</span><span id="L-2549"><a href="#L-2549"><span class="linenos">2549</span></a> <span class="n">after</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-2550"><a href="#L-2550"><span class="linenos">2550</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2551"><a href="#L-2551"><span class="linenos">2551</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2552"><a href="#L-2552"><span class="linenos">2552</span></a>
-</span><span id="L-2553"><a href="#L-2553"><span class="linenos">2553</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="L-2554"><a href="#L-2554"><span class="linenos">2554</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
+</span><span id="L-2553"><a href="#L-2553"><span class="linenos">2553</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATTERN&quot;</span><span class="p">):</span>
+</span><span id="L-2554"><a href="#L-2554"><span class="linenos">2554</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="L-2555"><a href="#L-2555"><span class="linenos">2555</span></a>
-</span><span id="L-2556"><a href="#L-2556"><span class="linenos">2556</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-2557"><a href="#L-2557"><span class="linenos">2557</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
-</span><span id="L-2558"><a href="#L-2558"><span class="linenos">2558</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="L-2559"><a href="#L-2559"><span class="linenos">2559</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">:</span>
-</span><span id="L-2560"><a href="#L-2560"><span class="linenos">2560</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
+</span><span id="L-2556"><a href="#L-2556"><span class="linenos">2556</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-2557"><a href="#L-2557"><span class="linenos">2557</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="L-2558"><a href="#L-2558"><span class="linenos">2558</span></a>
+</span><span id="L-2559"><a href="#L-2559"><span class="linenos">2559</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="L-2560"><a href="#L-2560"><span class="linenos">2560</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="L-2561"><a href="#L-2561"><span class="linenos">2561</span></a>
-</span><span id="L-2562"><a href="#L-2562"><span class="linenos">2562</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="L-2563"><a href="#L-2563"><span class="linenos">2563</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-2564"><a href="#L-2564"><span class="linenos">2564</span></a>
-</span><span id="L-2565"><a href="#L-2565"><span class="linenos">2565</span></a> <span class="k">if</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-2566"><a href="#L-2566"><span class="linenos">2566</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="L-2562"><a href="#L-2562"><span class="linenos">2562</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-2563"><a href="#L-2563"><span class="linenos">2563</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
+</span><span id="L-2564"><a href="#L-2564"><span class="linenos">2564</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="L-2565"><a href="#L-2565"><span class="linenos">2565</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">:</span>
+</span><span id="L-2566"><a href="#L-2566"><span class="linenos">2566</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
</span><span id="L-2567"><a href="#L-2567"><span class="linenos">2567</span></a>
-</span><span id="L-2568"><a href="#L-2568"><span class="linenos">2568</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
-</span><span id="L-2569"><a href="#L-2569"><span class="linenos">2569</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2570"><a href="#L-2570"><span class="linenos">2570</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2571"><a href="#L-2571"><span class="linenos">2571</span></a>
-</span><span id="L-2572"><a href="#L-2572"><span class="linenos">2572</span></a> <span class="n">define</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2573"><a href="#L-2573"><span class="linenos">2573</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_name_as_expression</span><span class="p">)</span>
-</span><span id="L-2574"><a href="#L-2574"><span class="linenos">2574</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFINE&quot;</span><span class="p">)</span>
-</span><span id="L-2575"><a href="#L-2575"><span class="linenos">2575</span></a> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-2576"><a href="#L-2576"><span class="linenos">2576</span></a> <span class="p">)</span>
+</span><span id="L-2568"><a href="#L-2568"><span class="linenos">2568</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="L-2569"><a href="#L-2569"><span class="linenos">2569</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-2570"><a href="#L-2570"><span class="linenos">2570</span></a>
+</span><span id="L-2571"><a href="#L-2571"><span class="linenos">2571</span></a> <span class="k">if</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-2572"><a href="#L-2572"><span class="linenos">2572</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="L-2573"><a href="#L-2573"><span class="linenos">2573</span></a>
+</span><span id="L-2574"><a href="#L-2574"><span class="linenos">2574</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
+</span><span id="L-2575"><a href="#L-2575"><span class="linenos">2575</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2576"><a href="#L-2576"><span class="linenos">2576</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2577"><a href="#L-2577"><span class="linenos">2577</span></a>
-</span><span id="L-2578"><a href="#L-2578"><span class="linenos">2578</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-2579"><a href="#L-2579"><span class="linenos">2579</span></a>
-</span><span id="L-2580"><a href="#L-2580"><span class="linenos">2580</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2581"><a href="#L-2581"><span class="linenos">2581</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
-</span><span id="L-2582"><a href="#L-2582"><span class="linenos">2582</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
-</span><span id="L-2583"><a href="#L-2583"><span class="linenos">2583</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="L-2584"><a href="#L-2584"><span class="linenos">2584</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
-</span><span id="L-2585"><a href="#L-2585"><span class="linenos">2585</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
-</span><span id="L-2586"><a href="#L-2586"><span class="linenos">2586</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
-</span><span id="L-2587"><a href="#L-2587"><span class="linenos">2587</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
-</span><span id="L-2588"><a href="#L-2588"><span class="linenos">2588</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
-</span><span id="L-2589"><a href="#L-2589"><span class="linenos">2589</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
-</span><span id="L-2590"><a href="#L-2590"><span class="linenos">2590</span></a> <span class="p">)</span>
-</span><span id="L-2591"><a href="#L-2591"><span class="linenos">2591</span></a>
-</span><span id="L-2592"><a href="#L-2592"><span class="linenos">2592</span></a> <span class="k">def</span> <span class="nf">_parse_lateral</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">]:</span>
-</span><span id="L-2593"><a href="#L-2593"><span class="linenos">2593</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">)</span>
-</span><span id="L-2594"><a href="#L-2594"><span class="linenos">2594</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cross_apply</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">):</span>
-</span><span id="L-2595"><a href="#L-2595"><span class="linenos">2595</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-2596"><a href="#L-2596"><span class="linenos">2596</span></a>
-</span><span id="L-2597"><a href="#L-2597"><span class="linenos">2597</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-2598"><a href="#L-2598"><span class="linenos">2598</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2599"><a href="#L-2599"><span class="linenos">2599</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2600"><a href="#L-2600"><span class="linenos">2600</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2601"><a href="#L-2601"><span class="linenos">2601</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LATERAL</span><span class="p">):</span>
-</span><span id="L-2602"><a href="#L-2602"><span class="linenos">2602</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2603"><a href="#L-2603"><span class="linenos">2603</span></a> <span class="n">view</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">)</span>
-</span><span id="L-2604"><a href="#L-2604"><span class="linenos">2604</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">)</span>
-</span><span id="L-2605"><a href="#L-2605"><span class="linenos">2605</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2606"><a href="#L-2606"><span class="linenos">2606</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2607"><a href="#L-2607"><span class="linenos">2607</span></a>
-</span><span id="L-2608"><a href="#L-2608"><span class="linenos">2608</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-2609"><a href="#L-2609"><span class="linenos">2609</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-2610"><a href="#L-2610"><span class="linenos">2610</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
-</span><span id="L-2611"><a href="#L-2611"><span class="linenos">2611</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
-</span><span id="L-2612"><a href="#L-2612"><span class="linenos">2612</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-2613"><a href="#L-2613"><span class="linenos">2613</span></a> <span class="p">)</span>
-</span><span id="L-2614"><a href="#L-2614"><span class="linenos">2614</span></a>
-</span><span id="L-2615"><a href="#L-2615"><span class="linenos">2615</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
-</span><span id="L-2616"><a href="#L-2616"><span class="linenos">2616</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">(</span>
-</span><span id="L-2617"><a href="#L-2617"><span class="linenos">2617</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-2618"><a href="#L-2618"><span class="linenos">2618</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="L-2619"><a href="#L-2619"><span class="linenos">2619</span></a> <span class="p">)</span>
+</span><span id="L-2578"><a href="#L-2578"><span class="linenos">2578</span></a> <span class="n">define</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2579"><a href="#L-2579"><span class="linenos">2579</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_name_as_expression</span><span class="p">)</span>
+</span><span id="L-2580"><a href="#L-2580"><span class="linenos">2580</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFINE&quot;</span><span class="p">)</span>
+</span><span id="L-2581"><a href="#L-2581"><span class="linenos">2581</span></a> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2582"><a href="#L-2582"><span class="linenos">2582</span></a> <span class="p">)</span>
+</span><span id="L-2583"><a href="#L-2583"><span class="linenos">2583</span></a>
+</span><span id="L-2584"><a href="#L-2584"><span class="linenos">2584</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-2585"><a href="#L-2585"><span class="linenos">2585</span></a>
+</span><span id="L-2586"><a href="#L-2586"><span class="linenos">2586</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2587"><a href="#L-2587"><span class="linenos">2587</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
+</span><span id="L-2588"><a href="#L-2588"><span class="linenos">2588</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
+</span><span id="L-2589"><a href="#L-2589"><span class="linenos">2589</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="L-2590"><a href="#L-2590"><span class="linenos">2590</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
+</span><span id="L-2591"><a href="#L-2591"><span class="linenos">2591</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
+</span><span id="L-2592"><a href="#L-2592"><span class="linenos">2592</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
+</span><span id="L-2593"><a href="#L-2593"><span class="linenos">2593</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
+</span><span id="L-2594"><a href="#L-2594"><span class="linenos">2594</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
+</span><span id="L-2595"><a href="#L-2595"><span class="linenos">2595</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
+</span><span id="L-2596"><a href="#L-2596"><span class="linenos">2596</span></a> <span class="p">)</span>
+</span><span id="L-2597"><a href="#L-2597"><span class="linenos">2597</span></a>
+</span><span id="L-2598"><a href="#L-2598"><span class="linenos">2598</span></a> <span class="k">def</span> <span class="nf">_parse_lateral</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">]:</span>
+</span><span id="L-2599"><a href="#L-2599"><span class="linenos">2599</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">)</span>
+</span><span id="L-2600"><a href="#L-2600"><span class="linenos">2600</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cross_apply</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">):</span>
+</span><span id="L-2601"><a href="#L-2601"><span class="linenos">2601</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-2602"><a href="#L-2602"><span class="linenos">2602</span></a>
+</span><span id="L-2603"><a href="#L-2603"><span class="linenos">2603</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-2604"><a href="#L-2604"><span class="linenos">2604</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2605"><a href="#L-2605"><span class="linenos">2605</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2606"><a href="#L-2606"><span class="linenos">2606</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2607"><a href="#L-2607"><span class="linenos">2607</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LATERAL</span><span class="p">):</span>
+</span><span id="L-2608"><a href="#L-2608"><span class="linenos">2608</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2609"><a href="#L-2609"><span class="linenos">2609</span></a> <span class="n">view</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">)</span>
+</span><span id="L-2610"><a href="#L-2610"><span class="linenos">2610</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">)</span>
+</span><span id="L-2611"><a href="#L-2611"><span class="linenos">2611</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2612"><a href="#L-2612"><span class="linenos">2612</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2613"><a href="#L-2613"><span class="linenos">2613</span></a>
+</span><span id="L-2614"><a href="#L-2614"><span class="linenos">2614</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-2615"><a href="#L-2615"><span class="linenos">2615</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-2616"><a href="#L-2616"><span class="linenos">2616</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
+</span><span id="L-2617"><a href="#L-2617"><span class="linenos">2617</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
+</span><span id="L-2618"><a href="#L-2618"><span class="linenos">2618</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-2619"><a href="#L-2619"><span class="linenos">2619</span></a> <span class="p">)</span>
</span><span id="L-2620"><a href="#L-2620"><span class="linenos">2620</span></a>
-</span><span id="L-2621"><a href="#L-2621"><span class="linenos">2621</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
-</span><span id="L-2622"><a href="#L-2622"><span class="linenos">2622</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-2623"><a href="#L-2623"><span class="linenos">2623</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="k">else</span> <span class="p">[]</span>
-</span><span id="L-2624"><a href="#L-2624"><span class="linenos">2624</span></a> <span class="n">table_alias</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2625"><a href="#L-2625"><span class="linenos">2625</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span>
-</span><span id="L-2626"><a href="#L-2626"><span class="linenos">2626</span></a> <span class="p">)</span>
-</span><span id="L-2627"><a href="#L-2627"><span class="linenos">2627</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">))</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="L-2628"><a href="#L-2628"><span class="linenos">2628</span></a> <span class="c1"># We move the alias from the lateral&#39;s child node to the lateral itself</span>
-</span><span id="L-2629"><a href="#L-2629"><span class="linenos">2629</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="L-2630"><a href="#L-2630"><span class="linenos">2630</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2631"><a href="#L-2631"><span class="linenos">2631</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
-</span><span id="L-2632"><a href="#L-2632"><span class="linenos">2632</span></a>
-</span><span id="L-2633"><a href="#L-2633"><span class="linenos">2633</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2634"><a href="#L-2634"><span class="linenos">2634</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span>
-</span><span id="L-2635"><a href="#L-2635"><span class="linenos">2635</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-2636"><a href="#L-2636"><span class="linenos">2636</span></a> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span>
-</span><span id="L-2637"><a href="#L-2637"><span class="linenos">2637</span></a> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span>
-</span><span id="L-2638"><a href="#L-2638"><span class="linenos">2638</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">table_alias</span><span class="p">,</span>
-</span><span id="L-2639"><a href="#L-2639"><span class="linenos">2639</span></a> <span class="n">cross_apply</span><span class="o">=</span><span class="n">cross_apply</span><span class="p">,</span>
-</span><span id="L-2640"><a href="#L-2640"><span class="linenos">2640</span></a> <span class="p">)</span>
-</span><span id="L-2641"><a href="#L-2641"><span class="linenos">2641</span></a>
-</span><span id="L-2642"><a href="#L-2642"><span class="linenos">2642</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
-</span><span id="L-2643"><a href="#L-2643"><span class="linenos">2643</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2644"><a href="#L-2644"><span class="linenos">2644</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]]:</span>
-</span><span id="L-2645"><a href="#L-2645"><span class="linenos">2645</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-2646"><a href="#L-2646"><span class="linenos">2646</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_METHODS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="L-2647"><a href="#L-2647"><span class="linenos">2647</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="L-2648"><a href="#L-2648"><span class="linenos">2648</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="L-2649"><a href="#L-2649"><span class="linenos">2649</span></a> <span class="p">)</span>
-</span><span id="L-2650"><a href="#L-2650"><span class="linenos">2650</span></a>
-</span><span id="L-2651"><a href="#L-2651"><span class="linenos">2651</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
-</span><span id="L-2652"><a href="#L-2652"><span class="linenos">2652</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-2653"><a href="#L-2653"><span class="linenos">2653</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
-</span><span id="L-2654"><a href="#L-2654"><span class="linenos">2654</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="L-2655"><a href="#L-2655"><span class="linenos">2655</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
+</span><span id="L-2621"><a href="#L-2621"><span class="linenos">2621</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
+</span><span id="L-2622"><a href="#L-2622"><span class="linenos">2622</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">(</span>
+</span><span id="L-2623"><a href="#L-2623"><span class="linenos">2623</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-2624"><a href="#L-2624"><span class="linenos">2624</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="L-2625"><a href="#L-2625"><span class="linenos">2625</span></a> <span class="p">)</span>
+</span><span id="L-2626"><a href="#L-2626"><span class="linenos">2626</span></a>
+</span><span id="L-2627"><a href="#L-2627"><span class="linenos">2627</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
+</span><span id="L-2628"><a href="#L-2628"><span class="linenos">2628</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-2629"><a href="#L-2629"><span class="linenos">2629</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="k">else</span> <span class="p">[]</span>
+</span><span id="L-2630"><a href="#L-2630"><span class="linenos">2630</span></a> <span class="n">table_alias</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2631"><a href="#L-2631"><span class="linenos">2631</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span>
+</span><span id="L-2632"><a href="#L-2632"><span class="linenos">2632</span></a> <span class="p">)</span>
+</span><span id="L-2633"><a href="#L-2633"><span class="linenos">2633</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">))</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
+</span><span id="L-2634"><a href="#L-2634"><span class="linenos">2634</span></a> <span class="c1"># We move the alias from the lateral&#39;s child node to the lateral itself</span>
+</span><span id="L-2635"><a href="#L-2635"><span class="linenos">2635</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="L-2636"><a href="#L-2636"><span class="linenos">2636</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2637"><a href="#L-2637"><span class="linenos">2637</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
+</span><span id="L-2638"><a href="#L-2638"><span class="linenos">2638</span></a>
+</span><span id="L-2639"><a href="#L-2639"><span class="linenos">2639</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2640"><a href="#L-2640"><span class="linenos">2640</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span>
+</span><span id="L-2641"><a href="#L-2641"><span class="linenos">2641</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-2642"><a href="#L-2642"><span class="linenos">2642</span></a> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span>
+</span><span id="L-2643"><a href="#L-2643"><span class="linenos">2643</span></a> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span>
+</span><span id="L-2644"><a href="#L-2644"><span class="linenos">2644</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">table_alias</span><span class="p">,</span>
+</span><span id="L-2645"><a href="#L-2645"><span class="linenos">2645</span></a> <span class="n">cross_apply</span><span class="o">=</span><span class="n">cross_apply</span><span class="p">,</span>
+</span><span id="L-2646"><a href="#L-2646"><span class="linenos">2646</span></a> <span class="p">)</span>
+</span><span id="L-2647"><a href="#L-2647"><span class="linenos">2647</span></a>
+</span><span id="L-2648"><a href="#L-2648"><span class="linenos">2648</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
+</span><span id="L-2649"><a href="#L-2649"><span class="linenos">2649</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2650"><a href="#L-2650"><span class="linenos">2650</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]]:</span>
+</span><span id="L-2651"><a href="#L-2651"><span class="linenos">2651</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-2652"><a href="#L-2652"><span class="linenos">2652</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_METHODS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="L-2653"><a href="#L-2653"><span class="linenos">2653</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="L-2654"><a href="#L-2654"><span class="linenos">2654</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="L-2655"><a href="#L-2655"><span class="linenos">2655</span></a> <span class="p">)</span>
</span><span id="L-2656"><a href="#L-2656"><span class="linenos">2656</span></a>
-</span><span id="L-2657"><a href="#L-2657"><span class="linenos">2657</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-2658"><a href="#L-2658"><span class="linenos">2658</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">()</span>
-</span><span id="L-2659"><a href="#L-2659"><span class="linenos">2659</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-2660"><a href="#L-2660"><span class="linenos">2660</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN</span><span class="p">)</span>
-</span><span id="L-2661"><a href="#L-2661"><span class="linenos">2661</span></a>
-</span><span id="L-2662"><a href="#L-2662"><span class="linenos">2662</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span><span class="p">:</span>
-</span><span id="L-2663"><a href="#L-2663"><span class="linenos">2663</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-2664"><a href="#L-2664"><span class="linenos">2664</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2665"><a href="#L-2665"><span class="linenos">2665</span></a> <span class="n">method</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2666"><a href="#L-2666"><span class="linenos">2666</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2657"><a href="#L-2657"><span class="linenos">2657</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
+</span><span id="L-2658"><a href="#L-2658"><span class="linenos">2658</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-2659"><a href="#L-2659"><span class="linenos">2659</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
+</span><span id="L-2660"><a href="#L-2660"><span class="linenos">2660</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="L-2661"><a href="#L-2661"><span class="linenos">2661</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
+</span><span id="L-2662"><a href="#L-2662"><span class="linenos">2662</span></a>
+</span><span id="L-2663"><a href="#L-2663"><span class="linenos">2663</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-2664"><a href="#L-2664"><span class="linenos">2664</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">()</span>
+</span><span id="L-2665"><a href="#L-2665"><span class="linenos">2665</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2666"><a href="#L-2666"><span class="linenos">2666</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN</span><span class="p">)</span>
</span><span id="L-2667"><a href="#L-2667"><span class="linenos">2667</span></a>
-</span><span id="L-2668"><a href="#L-2668"><span class="linenos">2668</span></a> <span class="n">outer_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="L-2669"><a href="#L-2669"><span class="linenos">2669</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="L-2670"><a href="#L-2670"><span class="linenos">2670</span></a>
-</span><span id="L-2671"><a href="#L-2671"><span class="linenos">2671</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">outer_apply</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">cross_apply</span><span class="p">:</span>
-</span><span id="L-2672"><a href="#L-2672"><span class="linenos">2672</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2668"><a href="#L-2668"><span class="linenos">2668</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span><span class="p">:</span>
+</span><span id="L-2669"><a href="#L-2669"><span class="linenos">2669</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-2670"><a href="#L-2670"><span class="linenos">2670</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2671"><a href="#L-2671"><span class="linenos">2671</span></a> <span class="n">method</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2672"><a href="#L-2672"><span class="linenos">2672</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-2673"><a href="#L-2673"><span class="linenos">2673</span></a>
-</span><span id="L-2674"><a href="#L-2674"><span class="linenos">2674</span></a> <span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)}</span>
-</span><span id="L-2675"><a href="#L-2675"><span class="linenos">2675</span></a>
-</span><span id="L-2676"><a href="#L-2676"><span class="linenos">2676</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
-</span><span id="L-2677"><a href="#L-2677"><span class="linenos">2677</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;method&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-2678"><a href="#L-2678"><span class="linenos">2678</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
-</span><span id="L-2679"><a href="#L-2679"><span class="linenos">2679</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-2680"><a href="#L-2680"><span class="linenos">2680</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-2681"><a href="#L-2681"><span class="linenos">2681</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kind</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-2682"><a href="#L-2682"><span class="linenos">2682</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
-</span><span id="L-2683"><a href="#L-2683"><span class="linenos">2683</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;hint&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hint</span>
-</span><span id="L-2684"><a href="#L-2684"><span class="linenos">2684</span></a>
-</span><span id="L-2685"><a href="#L-2685"><span class="linenos">2685</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
-</span><span id="L-2686"><a href="#L-2686"><span class="linenos">2686</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-2687"><a href="#L-2687"><span class="linenos">2687</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
-</span><span id="L-2688"><a href="#L-2688"><span class="linenos">2688</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="L-2689"><a href="#L-2689"><span class="linenos">2689</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">):</span>
-</span><span id="L-2690"><a href="#L-2690"><span class="linenos">2690</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-2691"><a href="#L-2691"><span class="linenos">2691</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">()</span>
-</span><span id="L-2692"><a href="#L-2692"><span class="linenos">2692</span></a>
-</span><span id="L-2693"><a href="#L-2693"><span class="linenos">2693</span></a> <span class="k">if</span> <span class="n">join</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
-</span><span id="L-2694"><a href="#L-2694"><span class="linenos">2694</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-2695"><a href="#L-2695"><span class="linenos">2695</span></a> <span class="k">elif</span> <span class="n">join</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
-</span><span id="L-2696"><a href="#L-2696"><span class="linenos">2696</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="L-2697"><a href="#L-2697"><span class="linenos">2697</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2698"><a href="#L-2698"><span class="linenos">2698</span></a> <span class="n">join</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2699"><a href="#L-2699"><span class="linenos">2699</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-2700"><a href="#L-2700"><span class="linenos">2700</span></a>
-</span><span id="L-2701"><a href="#L-2701"><span class="linenos">2701</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">join</span><span class="p">]</span> <span class="k">if</span> <span class="n">join</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-2702"><a href="#L-2702"><span class="linenos">2702</span></a>
-</span><span id="L-2703"><a href="#L-2703"><span class="linenos">2703</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">if</span> <span class="n">token</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">token</span><span class="o">.</span><span class="n">comments</span><span class="p">]</span>
-</span><span id="L-2704"><a href="#L-2704"><span class="linenos">2704</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="L-2705"><a href="#L-2705"><span class="linenos">2705</span></a>
-</span><span id="L-2706"><a href="#L-2706"><span class="linenos">2706</span></a> <span class="k">def</span> <span class="nf">_parse_opclass</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-2707"><a href="#L-2707"><span class="linenos">2707</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-2708"><a href="#L-2708"><span class="linenos">2708</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPCLASS_FOLLOW_KEYWORDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-2709"><a href="#L-2709"><span class="linenos">2709</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-2710"><a href="#L-2710"><span class="linenos">2710</span></a>
-</span><span id="L-2711"><a href="#L-2711"><span class="linenos">2711</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPTYPE_FOLLOW_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-2712"><a href="#L-2712"><span class="linenos">2712</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Opclass</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">())</span>
-</span><span id="L-2713"><a href="#L-2713"><span class="linenos">2713</span></a>
-</span><span id="L-2714"><a href="#L-2714"><span class="linenos">2714</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-2715"><a href="#L-2715"><span class="linenos">2715</span></a>
-</span><span id="L-2716"><a href="#L-2716"><span class="linenos">2716</span></a> <span class="k">def</span> <span class="nf">_parse_index</span><span class="p">(</span>
-</span><span id="L-2717"><a href="#L-2717"><span class="linenos">2717</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2718"><a href="#L-2718"><span class="linenos">2718</span></a> <span class="n">index</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-2719"><a href="#L-2719"><span class="linenos">2719</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">]:</span>
-</span><span id="L-2720"><a href="#L-2720"><span class="linenos">2720</span></a> <span class="k">if</span> <span class="n">index</span><span class="p">:</span>
-</span><span id="L-2721"><a href="#L-2721"><span class="linenos">2721</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2722"><a href="#L-2722"><span class="linenos">2722</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2723"><a href="#L-2723"><span class="linenos">2723</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2724"><a href="#L-2724"><span class="linenos">2724</span></a>
-</span><span id="L-2725"><a href="#L-2725"><span class="linenos">2725</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
-</span><span id="L-2726"><a href="#L-2726"><span class="linenos">2726</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span> <span class="c1"># hive</span>
-</span><span id="L-2727"><a href="#L-2727"><span class="linenos">2727</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2728"><a href="#L-2728"><span class="linenos">2728</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2729"><a href="#L-2729"><span class="linenos">2729</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">)</span>
-</span><span id="L-2730"><a href="#L-2730"><span class="linenos">2730</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PRIMARY&quot;</span><span class="p">)</span>
-</span><span id="L-2731"><a href="#L-2731"><span class="linenos">2731</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AMP&quot;</span><span class="p">)</span>
-</span><span id="L-2732"><a href="#L-2732"><span class="linenos">2732</span></a>
-</span><span id="L-2733"><a href="#L-2733"><span class="linenos">2733</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">):</span>
-</span><span id="L-2734"><a href="#L-2734"><span class="linenos">2734</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2735"><a href="#L-2735"><span class="linenos">2735</span></a>
-</span><span id="L-2736"><a href="#L-2736"><span class="linenos">2736</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-2737"><a href="#L-2737"><span class="linenos">2737</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2674"><a href="#L-2674"><span class="linenos">2674</span></a> <span class="n">outer_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="L-2675"><a href="#L-2675"><span class="linenos">2675</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="L-2676"><a href="#L-2676"><span class="linenos">2676</span></a>
+</span><span id="L-2677"><a href="#L-2677"><span class="linenos">2677</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">outer_apply</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">cross_apply</span><span class="p">:</span>
+</span><span id="L-2678"><a href="#L-2678"><span class="linenos">2678</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2679"><a href="#L-2679"><span class="linenos">2679</span></a>
+</span><span id="L-2680"><a href="#L-2680"><span class="linenos">2680</span></a> <span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)}</span>
+</span><span id="L-2681"><a href="#L-2681"><span class="linenos">2681</span></a>
+</span><span id="L-2682"><a href="#L-2682"><span class="linenos">2682</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
+</span><span id="L-2683"><a href="#L-2683"><span class="linenos">2683</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;method&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span>
+</span><span id="L-2684"><a href="#L-2684"><span class="linenos">2684</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
+</span><span id="L-2685"><a href="#L-2685"><span class="linenos">2685</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span>
+</span><span id="L-2686"><a href="#L-2686"><span class="linenos">2686</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-2687"><a href="#L-2687"><span class="linenos">2687</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kind</span><span class="o">.</span><span class="n">text</span>
+</span><span id="L-2688"><a href="#L-2688"><span class="linenos">2688</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
+</span><span id="L-2689"><a href="#L-2689"><span class="linenos">2689</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;hint&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hint</span>
+</span><span id="L-2690"><a href="#L-2690"><span class="linenos">2690</span></a>
+</span><span id="L-2691"><a href="#L-2691"><span class="linenos">2691</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
+</span><span id="L-2692"><a href="#L-2692"><span class="linenos">2692</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-2693"><a href="#L-2693"><span class="linenos">2693</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
+</span><span id="L-2694"><a href="#L-2694"><span class="linenos">2694</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="L-2695"><a href="#L-2695"><span class="linenos">2695</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">):</span>
+</span><span id="L-2696"><a href="#L-2696"><span class="linenos">2696</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-2697"><a href="#L-2697"><span class="linenos">2697</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">()</span>
+</span><span id="L-2698"><a href="#L-2698"><span class="linenos">2698</span></a>
+</span><span id="L-2699"><a href="#L-2699"><span class="linenos">2699</span></a> <span class="k">if</span> <span class="n">join</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
+</span><span id="L-2700"><a href="#L-2700"><span class="linenos">2700</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-2701"><a href="#L-2701"><span class="linenos">2701</span></a> <span class="k">elif</span> <span class="n">join</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
+</span><span id="L-2702"><a href="#L-2702"><span class="linenos">2702</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="L-2703"><a href="#L-2703"><span class="linenos">2703</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2704"><a href="#L-2704"><span class="linenos">2704</span></a> <span class="n">join</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2705"><a href="#L-2705"><span class="linenos">2705</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-2706"><a href="#L-2706"><span class="linenos">2706</span></a>
+</span><span id="L-2707"><a href="#L-2707"><span class="linenos">2707</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">join</span><span class="p">]</span> <span class="k">if</span> <span class="n">join</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-2708"><a href="#L-2708"><span class="linenos">2708</span></a>
+</span><span id="L-2709"><a href="#L-2709"><span class="linenos">2709</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">if</span> <span class="n">token</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">token</span><span class="o">.</span><span class="n">comments</span><span class="p">]</span>
+</span><span id="L-2710"><a href="#L-2710"><span class="linenos">2710</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="L-2711"><a href="#L-2711"><span class="linenos">2711</span></a>
+</span><span id="L-2712"><a href="#L-2712"><span class="linenos">2712</span></a> <span class="k">def</span> <span class="nf">_parse_opclass</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-2713"><a href="#L-2713"><span class="linenos">2713</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-2714"><a href="#L-2714"><span class="linenos">2714</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPCLASS_FOLLOW_KEYWORDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-2715"><a href="#L-2715"><span class="linenos">2715</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2716"><a href="#L-2716"><span class="linenos">2716</span></a>
+</span><span id="L-2717"><a href="#L-2717"><span class="linenos">2717</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPTYPE_FOLLOW_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-2718"><a href="#L-2718"><span class="linenos">2718</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Opclass</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">())</span>
+</span><span id="L-2719"><a href="#L-2719"><span class="linenos">2719</span></a>
+</span><span id="L-2720"><a href="#L-2720"><span class="linenos">2720</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2721"><a href="#L-2721"><span class="linenos">2721</span></a>
+</span><span id="L-2722"><a href="#L-2722"><span class="linenos">2722</span></a> <span class="k">def</span> <span class="nf">_parse_index</span><span class="p">(</span>
+</span><span id="L-2723"><a href="#L-2723"><span class="linenos">2723</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2724"><a href="#L-2724"><span class="linenos">2724</span></a> <span class="n">index</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-2725"><a href="#L-2725"><span class="linenos">2725</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">]:</span>
+</span><span id="L-2726"><a href="#L-2726"><span class="linenos">2726</span></a> <span class="k">if</span> <span class="n">index</span><span class="p">:</span>
+</span><span id="L-2727"><a href="#L-2727"><span class="linenos">2727</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2728"><a href="#L-2728"><span class="linenos">2728</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2729"><a href="#L-2729"><span class="linenos">2729</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2730"><a href="#L-2730"><span class="linenos">2730</span></a>
+</span><span id="L-2731"><a href="#L-2731"><span class="linenos">2731</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
+</span><span id="L-2732"><a href="#L-2732"><span class="linenos">2732</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span> <span class="c1"># hive</span>
+</span><span id="L-2733"><a href="#L-2733"><span class="linenos">2733</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2734"><a href="#L-2734"><span class="linenos">2734</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2735"><a href="#L-2735"><span class="linenos">2735</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">)</span>
+</span><span id="L-2736"><a href="#L-2736"><span class="linenos">2736</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PRIMARY&quot;</span><span class="p">)</span>
+</span><span id="L-2737"><a href="#L-2737"><span class="linenos">2737</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AMP&quot;</span><span class="p">)</span>
</span><span id="L-2738"><a href="#L-2738"><span class="linenos">2738</span></a>
-</span><span id="L-2739"><a href="#L-2739"><span class="linenos">2739</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-2740"><a href="#L-2740"><span class="linenos">2740</span></a>
-</span><span id="L-2741"><a href="#L-2741"><span class="linenos">2741</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-2742"><a href="#L-2742"><span class="linenos">2742</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_opclass</span><span class="p">))</span>
-</span><span id="L-2743"><a href="#L-2743"><span class="linenos">2743</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2744"><a href="#L-2744"><span class="linenos">2744</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2745"><a href="#L-2745"><span class="linenos">2745</span></a>
-</span><span id="L-2746"><a href="#L-2746"><span class="linenos">2746</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCLUDE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-2747"><a href="#L-2747"><span class="linenos">2747</span></a>
-</span><span id="L-2748"><a href="#L-2748"><span class="linenos">2748</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2749"><a href="#L-2749"><span class="linenos">2749</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
-</span><span id="L-2750"><a href="#L-2750"><span class="linenos">2750</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
-</span><span id="L-2751"><a href="#L-2751"><span class="linenos">2751</span></a> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
-</span><span id="L-2752"><a href="#L-2752"><span class="linenos">2752</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
-</span><span id="L-2753"><a href="#L-2753"><span class="linenos">2753</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
-</span><span id="L-2754"><a href="#L-2754"><span class="linenos">2754</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
-</span><span id="L-2755"><a href="#L-2755"><span class="linenos">2755</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
-</span><span id="L-2756"><a href="#L-2756"><span class="linenos">2756</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
-</span><span id="L-2757"><a href="#L-2757"><span class="linenos">2757</span></a> <span class="n">include</span><span class="o">=</span><span class="n">include</span><span class="p">,</span>
-</span><span id="L-2758"><a href="#L-2758"><span class="linenos">2758</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span>
-</span><span id="L-2759"><a href="#L-2759"><span class="linenos">2759</span></a> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
-</span><span id="L-2760"><a href="#L-2760"><span class="linenos">2760</span></a> <span class="p">)</span>
-</span><span id="L-2761"><a href="#L-2761"><span class="linenos">2761</span></a>
-</span><span id="L-2762"><a href="#L-2762"><span class="linenos">2762</span></a> <span class="k">def</span> <span class="nf">_parse_table_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="L-2763"><a href="#L-2763"><span class="linenos">2763</span></a> <span class="n">hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-2764"><a href="#L-2764"><span class="linenos">2764</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-2765"><a href="#L-2765"><span class="linenos">2765</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
-</span><span id="L-2766"><a href="#L-2766"><span class="linenos">2766</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-2767"><a href="#L-2767"><span class="linenos">2767</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2768"><a href="#L-2768"><span class="linenos">2768</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">,</span>
-</span><span id="L-2769"><a href="#L-2769"><span class="linenos">2769</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="L-2770"><a href="#L-2770"><span class="linenos">2770</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2771"><a href="#L-2771"><span class="linenos">2771</span></a> <span class="p">),</span>
-</span><span id="L-2772"><a href="#L-2772"><span class="linenos">2772</span></a> <span class="p">)</span>
-</span><span id="L-2773"><a href="#L-2773"><span class="linenos">2773</span></a> <span class="p">)</span>
-</span><span id="L-2774"><a href="#L-2774"><span class="linenos">2774</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-2775"><a href="#L-2775"><span class="linenos">2775</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2776"><a href="#L-2776"><span class="linenos">2776</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
-</span><span id="L-2777"><a href="#L-2777"><span class="linenos">2777</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span><span class="p">):</span>
-</span><span id="L-2778"><a href="#L-2778"><span class="linenos">2778</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-2779"><a href="#L-2779"><span class="linenos">2779</span></a>
-</span><span id="L-2780"><a href="#L-2780"><span class="linenos">2780</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">))</span>
-</span><span id="L-2781"><a href="#L-2781"><span class="linenos">2781</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
-</span><span id="L-2782"><a href="#L-2782"><span class="linenos">2782</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-2783"><a href="#L-2783"><span class="linenos">2783</span></a>
-</span><span id="L-2784"><a href="#L-2784"><span class="linenos">2784</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">())</span>
-</span><span id="L-2785"><a href="#L-2785"><span class="linenos">2785</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
-</span><span id="L-2786"><a href="#L-2786"><span class="linenos">2786</span></a>
-</span><span id="L-2787"><a href="#L-2787"><span class="linenos">2787</span></a> <span class="k">return</span> <span class="n">hints</span> <span class="ow">or</span> <span class="kc">None</span>
-</span><span id="L-2788"><a href="#L-2788"><span class="linenos">2788</span></a>
-</span><span id="L-2789"><a href="#L-2789"><span class="linenos">2789</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-2790"><a href="#L-2790"><span class="linenos">2790</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-2791"><a href="#L-2791"><span class="linenos">2791</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">schema</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">optional_parens</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="L-2792"><a href="#L-2792"><span class="linenos">2792</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-2793"><a href="#L-2793"><span class="linenos">2793</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
-</span><span id="L-2794"><a href="#L-2794"><span class="linenos">2794</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="L-2795"><a href="#L-2795"><span class="linenos">2795</span></a> <span class="p">)</span>
-</span><span id="L-2796"><a href="#L-2796"><span class="linenos">2796</span></a>
-</span><span id="L-2797"><a href="#L-2797"><span class="linenos">2797</span></a> <span class="k">def</span> <span class="nf">_parse_table_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span>
-</span><span id="L-2798"><a href="#L-2798"><span class="linenos">2798</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2799"><a href="#L-2799"><span class="linenos">2799</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2800"><a href="#L-2800"><span class="linenos">2800</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="L-2801"><a href="#L-2801"><span class="linenos">2801</span></a>
-</span><span id="L-2802"><a href="#L-2802"><span class="linenos">2802</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
-</span><span id="L-2803"><a href="#L-2803"><span class="linenos">2803</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
-</span><span id="L-2804"><a href="#L-2804"><span class="linenos">2804</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
-</span><span id="L-2805"><a href="#L-2805"><span class="linenos">2805</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2806"><a href="#L-2806"><span class="linenos">2806</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="L-2807"><a href="#L-2807"><span class="linenos">2807</span></a> <span class="p">)</span>
-</span><span id="L-2808"><a href="#L-2808"><span class="linenos">2808</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2809"><a href="#L-2809"><span class="linenos">2809</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
-</span><span id="L-2810"><a href="#L-2810"><span class="linenos">2810</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="L-2811"><a href="#L-2811"><span class="linenos">2811</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-2812"><a href="#L-2812"><span class="linenos">2812</span></a>
-</span><span id="L-2813"><a href="#L-2813"><span class="linenos">2813</span></a> <span class="k">if</span> <span class="n">is_db_reference</span><span class="p">:</span>
-</span><span id="L-2814"><a href="#L-2814"><span class="linenos">2814</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
-</span><span id="L-2815"><a href="#L-2815"><span class="linenos">2815</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="L-2816"><a href="#L-2816"><span class="linenos">2816</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2817"><a href="#L-2817"><span class="linenos">2817</span></a>
-</span><span id="L-2818"><a href="#L-2818"><span class="linenos">2818</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">is_db_reference</span><span class="p">:</span>
-</span><span id="L-2819"><a href="#L-2819"><span class="linenos">2819</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected table name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-2820"><a href="#L-2820"><span class="linenos">2820</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">db</span> <span class="ow">and</span> <span class="n">is_db_reference</span><span class="p">:</span>
-</span><span id="L-2821"><a href="#L-2821"><span class="linenos">2821</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected database name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-2822"><a href="#L-2822"><span class="linenos">2822</span></a>
-</span><span id="L-2823"><a href="#L-2823"><span class="linenos">2823</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2824"><a href="#L-2824"><span class="linenos">2824</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span> <span class="n">catalog</span><span class="o">=</span><span class="n">catalog</span><span class="p">,</span> <span class="n">pivots</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">()</span>
-</span><span id="L-2825"><a href="#L-2825"><span class="linenos">2825</span></a> <span class="p">)</span>
-</span><span id="L-2826"><a href="#L-2826"><span class="linenos">2826</span></a>
-</span><span id="L-2827"><a href="#L-2827"><span class="linenos">2827</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
-</span><span id="L-2828"><a href="#L-2828"><span class="linenos">2828</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-2829"><a href="#L-2829"><span class="linenos">2829</span></a> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2830"><a href="#L-2830"><span class="linenos">2830</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2831"><a href="#L-2831"><span class="linenos">2831</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-2832"><a href="#L-2832"><span class="linenos">2832</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2833"><a href="#L-2833"><span class="linenos">2833</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-2834"><a href="#L-2834"><span class="linenos">2834</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-2835"><a href="#L-2835"><span class="linenos">2835</span></a> <span class="n">lateral</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">()</span>
-</span><span id="L-2836"><a href="#L-2836"><span class="linenos">2836</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
-</span><span id="L-2837"><a href="#L-2837"><span class="linenos">2837</span></a> <span class="k">return</span> <span class="n">lateral</span>
-</span><span id="L-2838"><a href="#L-2838"><span class="linenos">2838</span></a>
-</span><span id="L-2839"><a href="#L-2839"><span class="linenos">2839</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
-</span><span id="L-2840"><a href="#L-2840"><span class="linenos">2840</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="L-2841"><a href="#L-2841"><span class="linenos">2841</span></a> <span class="k">return</span> <span class="n">unnest</span>
-</span><span id="L-2842"><a href="#L-2842"><span class="linenos">2842</span></a>
-</span><span id="L-2843"><a href="#L-2843"><span class="linenos">2843</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">()</span>
-</span><span id="L-2844"><a href="#L-2844"><span class="linenos">2844</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="L-2845"><a href="#L-2845"><span class="linenos">2845</span></a> <span class="k">return</span> <span class="n">values</span>
-</span><span id="L-2846"><a href="#L-2846"><span class="linenos">2846</span></a>
-</span><span id="L-2847"><a href="#L-2847"><span class="linenos">2847</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2848"><a href="#L-2848"><span class="linenos">2848</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
-</span><span id="L-2849"><a href="#L-2849"><span class="linenos">2849</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">subquery</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">):</span>
-</span><span id="L-2850"><a href="#L-2850"><span class="linenos">2850</span></a> <span class="n">subquery</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
-</span><span id="L-2851"><a href="#L-2851"><span class="linenos">2851</span></a> <span class="k">return</span> <span class="n">subquery</span>
+</span><span id="L-2739"><a href="#L-2739"><span class="linenos">2739</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">):</span>
+</span><span id="L-2740"><a href="#L-2740"><span class="linenos">2740</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2741"><a href="#L-2741"><span class="linenos">2741</span></a>
+</span><span id="L-2742"><a href="#L-2742"><span class="linenos">2742</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-2743"><a href="#L-2743"><span class="linenos">2743</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2744"><a href="#L-2744"><span class="linenos">2744</span></a>
+</span><span id="L-2745"><a href="#L-2745"><span class="linenos">2745</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2746"><a href="#L-2746"><span class="linenos">2746</span></a>
+</span><span id="L-2747"><a href="#L-2747"><span class="linenos">2747</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-2748"><a href="#L-2748"><span class="linenos">2748</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_opclass</span><span class="p">))</span>
+</span><span id="L-2749"><a href="#L-2749"><span class="linenos">2749</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2750"><a href="#L-2750"><span class="linenos">2750</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2751"><a href="#L-2751"><span class="linenos">2751</span></a>
+</span><span id="L-2752"><a href="#L-2752"><span class="linenos">2752</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCLUDE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2753"><a href="#L-2753"><span class="linenos">2753</span></a>
+</span><span id="L-2754"><a href="#L-2754"><span class="linenos">2754</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2755"><a href="#L-2755"><span class="linenos">2755</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
+</span><span id="L-2756"><a href="#L-2756"><span class="linenos">2756</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
+</span><span id="L-2757"><a href="#L-2757"><span class="linenos">2757</span></a> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
+</span><span id="L-2758"><a href="#L-2758"><span class="linenos">2758</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
+</span><span id="L-2759"><a href="#L-2759"><span class="linenos">2759</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
+</span><span id="L-2760"><a href="#L-2760"><span class="linenos">2760</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
+</span><span id="L-2761"><a href="#L-2761"><span class="linenos">2761</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
+</span><span id="L-2762"><a href="#L-2762"><span class="linenos">2762</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
+</span><span id="L-2763"><a href="#L-2763"><span class="linenos">2763</span></a> <span class="n">include</span><span class="o">=</span><span class="n">include</span><span class="p">,</span>
+</span><span id="L-2764"><a href="#L-2764"><span class="linenos">2764</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span>
+</span><span id="L-2765"><a href="#L-2765"><span class="linenos">2765</span></a> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
+</span><span id="L-2766"><a href="#L-2766"><span class="linenos">2766</span></a> <span class="p">)</span>
+</span><span id="L-2767"><a href="#L-2767"><span class="linenos">2767</span></a>
+</span><span id="L-2768"><a href="#L-2768"><span class="linenos">2768</span></a> <span class="k">def</span> <span class="nf">_parse_table_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-2769"><a href="#L-2769"><span class="linenos">2769</span></a> <span class="n">hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-2770"><a href="#L-2770"><span class="linenos">2770</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-2771"><a href="#L-2771"><span class="linenos">2771</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
+</span><span id="L-2772"><a href="#L-2772"><span class="linenos">2772</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-2773"><a href="#L-2773"><span class="linenos">2773</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2774"><a href="#L-2774"><span class="linenos">2774</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">,</span>
+</span><span id="L-2775"><a href="#L-2775"><span class="linenos">2775</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="L-2776"><a href="#L-2776"><span class="linenos">2776</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2777"><a href="#L-2777"><span class="linenos">2777</span></a> <span class="p">),</span>
+</span><span id="L-2778"><a href="#L-2778"><span class="linenos">2778</span></a> <span class="p">)</span>
+</span><span id="L-2779"><a href="#L-2779"><span class="linenos">2779</span></a> <span class="p">)</span>
+</span><span id="L-2780"><a href="#L-2780"><span class="linenos">2780</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-2781"><a href="#L-2781"><span class="linenos">2781</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2782"><a href="#L-2782"><span class="linenos">2782</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
+</span><span id="L-2783"><a href="#L-2783"><span class="linenos">2783</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span><span class="p">):</span>
+</span><span id="L-2784"><a href="#L-2784"><span class="linenos">2784</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-2785"><a href="#L-2785"><span class="linenos">2785</span></a>
+</span><span id="L-2786"><a href="#L-2786"><span class="linenos">2786</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">))</span>
+</span><span id="L-2787"><a href="#L-2787"><span class="linenos">2787</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
+</span><span id="L-2788"><a href="#L-2788"><span class="linenos">2788</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-2789"><a href="#L-2789"><span class="linenos">2789</span></a>
+</span><span id="L-2790"><a href="#L-2790"><span class="linenos">2790</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">())</span>
+</span><span id="L-2791"><a href="#L-2791"><span class="linenos">2791</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="L-2792"><a href="#L-2792"><span class="linenos">2792</span></a>
+</span><span id="L-2793"><a href="#L-2793"><span class="linenos">2793</span></a> <span class="k">return</span> <span class="n">hints</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="L-2794"><a href="#L-2794"><span class="linenos">2794</span></a>
+</span><span id="L-2795"><a href="#L-2795"><span class="linenos">2795</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-2796"><a href="#L-2796"><span class="linenos">2796</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-2797"><a href="#L-2797"><span class="linenos">2797</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">schema</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">optional_parens</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="L-2798"><a href="#L-2798"><span class="linenos">2798</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-2799"><a href="#L-2799"><span class="linenos">2799</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
+</span><span id="L-2800"><a href="#L-2800"><span class="linenos">2800</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-2801"><a href="#L-2801"><span class="linenos">2801</span></a> <span class="p">)</span>
+</span><span id="L-2802"><a href="#L-2802"><span class="linenos">2802</span></a>
+</span><span id="L-2803"><a href="#L-2803"><span class="linenos">2803</span></a> <span class="k">def</span> <span class="nf">_parse_table_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span>
+</span><span id="L-2804"><a href="#L-2804"><span class="linenos">2804</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2805"><a href="#L-2805"><span class="linenos">2805</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2806"><a href="#L-2806"><span class="linenos">2806</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="L-2807"><a href="#L-2807"><span class="linenos">2807</span></a>
+</span><span id="L-2808"><a href="#L-2808"><span class="linenos">2808</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
+</span><span id="L-2809"><a href="#L-2809"><span class="linenos">2809</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
+</span><span id="L-2810"><a href="#L-2810"><span class="linenos">2810</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
+</span><span id="L-2811"><a href="#L-2811"><span class="linenos">2811</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2812"><a href="#L-2812"><span class="linenos">2812</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="L-2813"><a href="#L-2813"><span class="linenos">2813</span></a> <span class="p">)</span>
+</span><span id="L-2814"><a href="#L-2814"><span class="linenos">2814</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2815"><a href="#L-2815"><span class="linenos">2815</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
+</span><span id="L-2816"><a href="#L-2816"><span class="linenos">2816</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="L-2817"><a href="#L-2817"><span class="linenos">2817</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-2818"><a href="#L-2818"><span class="linenos">2818</span></a>
+</span><span id="L-2819"><a href="#L-2819"><span class="linenos">2819</span></a> <span class="k">if</span> <span class="n">is_db_reference</span><span class="p">:</span>
+</span><span id="L-2820"><a href="#L-2820"><span class="linenos">2820</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
+</span><span id="L-2821"><a href="#L-2821"><span class="linenos">2821</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="L-2822"><a href="#L-2822"><span class="linenos">2822</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2823"><a href="#L-2823"><span class="linenos">2823</span></a>
+</span><span id="L-2824"><a href="#L-2824"><span class="linenos">2824</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">is_db_reference</span><span class="p">:</span>
+</span><span id="L-2825"><a href="#L-2825"><span class="linenos">2825</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected table name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-2826"><a href="#L-2826"><span class="linenos">2826</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">db</span> <span class="ow">and</span> <span class="n">is_db_reference</span><span class="p">:</span>
+</span><span id="L-2827"><a href="#L-2827"><span class="linenos">2827</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected database name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-2828"><a href="#L-2828"><span class="linenos">2828</span></a>
+</span><span id="L-2829"><a href="#L-2829"><span class="linenos">2829</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2830"><a href="#L-2830"><span class="linenos">2830</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span> <span class="n">catalog</span><span class="o">=</span><span class="n">catalog</span><span class="p">,</span> <span class="n">pivots</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">()</span>
+</span><span id="L-2831"><a href="#L-2831"><span class="linenos">2831</span></a> <span class="p">)</span>
+</span><span id="L-2832"><a href="#L-2832"><span class="linenos">2832</span></a>
+</span><span id="L-2833"><a href="#L-2833"><span class="linenos">2833</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
+</span><span id="L-2834"><a href="#L-2834"><span class="linenos">2834</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-2835"><a href="#L-2835"><span class="linenos">2835</span></a> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2836"><a href="#L-2836"><span class="linenos">2836</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2837"><a href="#L-2837"><span class="linenos">2837</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-2838"><a href="#L-2838"><span class="linenos">2838</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2839"><a href="#L-2839"><span class="linenos">2839</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-2840"><a href="#L-2840"><span class="linenos">2840</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-2841"><a href="#L-2841"><span class="linenos">2841</span></a> <span class="n">lateral</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">()</span>
+</span><span id="L-2842"><a href="#L-2842"><span class="linenos">2842</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
+</span><span id="L-2843"><a href="#L-2843"><span class="linenos">2843</span></a> <span class="k">return</span> <span class="n">lateral</span>
+</span><span id="L-2844"><a href="#L-2844"><span class="linenos">2844</span></a>
+</span><span id="L-2845"><a href="#L-2845"><span class="linenos">2845</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
+</span><span id="L-2846"><a href="#L-2846"><span class="linenos">2846</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="L-2847"><a href="#L-2847"><span class="linenos">2847</span></a> <span class="k">return</span> <span class="n">unnest</span>
+</span><span id="L-2848"><a href="#L-2848"><span class="linenos">2848</span></a>
+</span><span id="L-2849"><a href="#L-2849"><span class="linenos">2849</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">()</span>
+</span><span id="L-2850"><a href="#L-2850"><span class="linenos">2850</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="L-2851"><a href="#L-2851"><span class="linenos">2851</span></a> <span class="k">return</span> <span class="n">values</span>
</span><span id="L-2852"><a href="#L-2852"><span class="linenos">2852</span></a>
-</span><span id="L-2853"><a href="#L-2853"><span class="linenos">2853</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="n">parse_bracket</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="L-2854"><a href="#L-2854"><span class="linenos">2854</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">bracket</span><span class="p">)</span> <span class="k">if</span> <span class="n">bracket</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-2855"><a href="#L-2855"><span class="linenos">2855</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
-</span><span id="L-2856"><a href="#L-2856"><span class="linenos">2856</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
-</span><span id="L-2857"><a href="#L-2857"><span class="linenos">2857</span></a> <span class="n">bracket</span>
-</span><span id="L-2858"><a href="#L-2858"><span class="linenos">2858</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span>
-</span><span id="L-2859"><a href="#L-2859"><span class="linenos">2859</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">)</span>
-</span><span id="L-2860"><a href="#L-2860"><span class="linenos">2860</span></a> <span class="p">),</span>
-</span><span id="L-2861"><a href="#L-2861"><span class="linenos">2861</span></a> <span class="p">)</span>
-</span><span id="L-2862"><a href="#L-2862"><span class="linenos">2862</span></a>
-</span><span id="L-2863"><a href="#L-2863"><span class="linenos">2863</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
-</span><span id="L-2864"><a href="#L-2864"><span class="linenos">2864</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-2865"><a href="#L-2865"><span class="linenos">2865</span></a>
-</span><span id="L-2866"><a href="#L-2866"><span class="linenos">2866</span></a> <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_version</span><span class="p">()</span>
-</span><span id="L-2867"><a href="#L-2867"><span class="linenos">2867</span></a>
-</span><span id="L-2868"><a href="#L-2868"><span class="linenos">2868</span></a> <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
-</span><span id="L-2869"><a href="#L-2869"><span class="linenos">2869</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span>
-</span><span id="L-2870"><a href="#L-2870"><span class="linenos">2870</span></a>
-</span><span id="L-2871"><a href="#L-2871"><span class="linenos">2871</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
-</span><span id="L-2872"><a href="#L-2872"><span class="linenos">2872</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="L-2853"><a href="#L-2853"><span class="linenos">2853</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2854"><a href="#L-2854"><span class="linenos">2854</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
+</span><span id="L-2855"><a href="#L-2855"><span class="linenos">2855</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">subquery</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">):</span>
+</span><span id="L-2856"><a href="#L-2856"><span class="linenos">2856</span></a> <span class="n">subquery</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
+</span><span id="L-2857"><a href="#L-2857"><span class="linenos">2857</span></a> <span class="k">return</span> <span class="n">subquery</span>
+</span><span id="L-2858"><a href="#L-2858"><span class="linenos">2858</span></a>
+</span><span id="L-2859"><a href="#L-2859"><span class="linenos">2859</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="n">parse_bracket</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="L-2860"><a href="#L-2860"><span class="linenos">2860</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">bracket</span><span class="p">)</span> <span class="k">if</span> <span class="n">bracket</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2861"><a href="#L-2861"><span class="linenos">2861</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="L-2862"><a href="#L-2862"><span class="linenos">2862</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
+</span><span id="L-2863"><a href="#L-2863"><span class="linenos">2863</span></a> <span class="n">bracket</span>
+</span><span id="L-2864"><a href="#L-2864"><span class="linenos">2864</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span>
+</span><span id="L-2865"><a href="#L-2865"><span class="linenos">2865</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">)</span>
+</span><span id="L-2866"><a href="#L-2866"><span class="linenos">2866</span></a> <span class="p">),</span>
+</span><span id="L-2867"><a href="#L-2867"><span class="linenos">2867</span></a> <span class="p">)</span>
+</span><span id="L-2868"><a href="#L-2868"><span class="linenos">2868</span></a>
+</span><span id="L-2869"><a href="#L-2869"><span class="linenos">2869</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
+</span><span id="L-2870"><a href="#L-2870"><span class="linenos">2870</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-2871"><a href="#L-2871"><span class="linenos">2871</span></a>
+</span><span id="L-2872"><a href="#L-2872"><span class="linenos">2872</span></a> <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_version</span><span class="p">()</span>
</span><span id="L-2873"><a href="#L-2873"><span class="linenos">2873</span></a>
-</span><span id="L-2874"><a href="#L-2874"><span class="linenos">2874</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(</span><span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">)</span>
-</span><span id="L-2875"><a href="#L-2875"><span class="linenos">2875</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-2876"><a href="#L-2876"><span class="linenos">2876</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="n">alias</span><span class="p">)</span>
-</span><span id="L-2877"><a href="#L-2877"><span class="linenos">2877</span></a>
-</span><span id="L-2878"><a href="#L-2878"><span class="linenos">2878</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">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">):</span>
-</span><span id="L-2879"><a href="#L-2879"><span class="linenos">2879</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2880"><a href="#L-2880"><span class="linenos">2880</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtIndex</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">to_column</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-2881"><a href="#L-2881"><span class="linenos">2881</span></a> <span class="p">)</span>
-</span><span id="L-2882"><a href="#L-2882"><span class="linenos">2882</span></a>
-</span><span id="L-2883"><a href="#L-2883"><span class="linenos">2883</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_hints</span><span class="p">())</span>
-</span><span id="L-2884"><a href="#L-2884"><span class="linenos">2884</span></a>
-</span><span id="L-2885"><a href="#L-2885"><span class="linenos">2885</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">):</span>
-</span><span id="L-2886"><a href="#L-2886"><span class="linenos">2886</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
-</span><span id="L-2887"><a href="#L-2887"><span class="linenos">2887</span></a>
-</span><span id="L-2888"><a href="#L-2888"><span class="linenos">2888</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
-</span><span id="L-2889"><a href="#L-2889"><span class="linenos">2889</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="L-2874"><a href="#L-2874"><span class="linenos">2874</span></a> <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
+</span><span id="L-2875"><a href="#L-2875"><span class="linenos">2875</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span>
+</span><span id="L-2876"><a href="#L-2876"><span class="linenos">2876</span></a>
+</span><span id="L-2877"><a href="#L-2877"><span class="linenos">2877</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
+</span><span id="L-2878"><a href="#L-2878"><span class="linenos">2878</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="L-2879"><a href="#L-2879"><span class="linenos">2879</span></a>
+</span><span id="L-2880"><a href="#L-2880"><span class="linenos">2880</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(</span><span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">)</span>
+</span><span id="L-2881"><a href="#L-2881"><span class="linenos">2881</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-2882"><a href="#L-2882"><span class="linenos">2882</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="n">alias</span><span class="p">)</span>
+</span><span id="L-2883"><a href="#L-2883"><span class="linenos">2883</span></a>
+</span><span id="L-2884"><a href="#L-2884"><span class="linenos">2884</span></a> <span class="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">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">):</span>
+</span><span id="L-2885"><a href="#L-2885"><span class="linenos">2885</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2886"><a href="#L-2886"><span class="linenos">2886</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtIndex</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">to_column</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-2887"><a href="#L-2887"><span class="linenos">2887</span></a> <span class="p">)</span>
+</span><span id="L-2888"><a href="#L-2888"><span class="linenos">2888</span></a>
+</span><span id="L-2889"><a href="#L-2889"><span class="linenos">2889</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_hints</span><span class="p">())</span>
</span><span id="L-2890"><a href="#L-2890"><span class="linenos">2890</span></a>
-</span><span id="L-2891"><a href="#L-2891"><span class="linenos">2891</span></a> <span class="k">if</span> <span class="n">table_sample</span><span class="p">:</span>
-</span><span id="L-2892"><a href="#L-2892"><span class="linenos">2892</span></a> <span class="n">table_sample</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="L-2893"><a href="#L-2893"><span class="linenos">2893</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</span>
-</span><span id="L-2894"><a href="#L-2894"><span class="linenos">2894</span></a>
-</span><span id="L-2895"><a href="#L-2895"><span class="linenos">2895</span></a> <span class="k">if</span> <span class="n">joins</span><span class="p">:</span>
-</span><span id="L-2896"><a href="#L-2896"><span class="linenos">2896</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
-</span><span id="L-2897"><a href="#L-2897"><span class="linenos">2897</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">join</span><span class="p">)</span>
-</span><span id="L-2898"><a href="#L-2898"><span class="linenos">2898</span></a>
-</span><span id="L-2899"><a href="#L-2899"><span class="linenos">2899</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">):</span>
-</span><span id="L-2900"><a href="#L-2900"><span class="linenos">2900</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;ordinality&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2901"><a href="#L-2901"><span class="linenos">2901</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
-</span><span id="L-2902"><a href="#L-2902"><span class="linenos">2902</span></a>
-</span><span id="L-2903"><a href="#L-2903"><span class="linenos">2903</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2891"><a href="#L-2891"><span class="linenos">2891</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">):</span>
+</span><span id="L-2892"><a href="#L-2892"><span class="linenos">2892</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
+</span><span id="L-2893"><a href="#L-2893"><span class="linenos">2893</span></a>
+</span><span id="L-2894"><a href="#L-2894"><span class="linenos">2894</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
+</span><span id="L-2895"><a href="#L-2895"><span class="linenos">2895</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="L-2896"><a href="#L-2896"><span class="linenos">2896</span></a>
+</span><span id="L-2897"><a href="#L-2897"><span class="linenos">2897</span></a> <span class="k">if</span> <span class="n">table_sample</span><span class="p">:</span>
+</span><span id="L-2898"><a href="#L-2898"><span class="linenos">2898</span></a> <span class="n">table_sample</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="L-2899"><a href="#L-2899"><span class="linenos">2899</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</span>
+</span><span id="L-2900"><a href="#L-2900"><span class="linenos">2900</span></a>
+</span><span id="L-2901"><a href="#L-2901"><span class="linenos">2901</span></a> <span class="k">if</span> <span class="n">joins</span><span class="p">:</span>
+</span><span id="L-2902"><a href="#L-2902"><span class="linenos">2902</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
+</span><span id="L-2903"><a href="#L-2903"><span class="linenos">2903</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">join</span><span class="p">)</span>
</span><span id="L-2904"><a href="#L-2904"><span class="linenos">2904</span></a>
-</span><span id="L-2905"><a href="#L-2905"><span class="linenos">2905</span></a> <span class="k">def</span> <span class="nf">_parse_version</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">]:</span>
-</span><span id="L-2906"><a href="#L-2906"><span class="linenos">2906</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
-</span><span id="L-2907"><a href="#L-2907"><span class="linenos">2907</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;TIMESTAMP&quot;</span>
-</span><span id="L-2908"><a href="#L-2908"><span class="linenos">2908</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">):</span>
-</span><span id="L-2909"><a href="#L-2909"><span class="linenos">2909</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;VERSION&quot;</span>
-</span><span id="L-2910"><a href="#L-2910"><span class="linenos">2910</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2911"><a href="#L-2911"><span class="linenos">2911</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2912"><a href="#L-2912"><span class="linenos">2912</span></a>
-</span><span id="L-2913"><a href="#L-2913"><span class="linenos">2913</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
-</span><span id="L-2914"><a href="#L-2914"><span class="linenos">2914</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-2915"><a href="#L-2915"><span class="linenos">2915</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-2916"><a href="#L-2916"><span class="linenos">2916</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
-</span><span id="L-2917"><a href="#L-2917"><span class="linenos">2917</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-2918"><a href="#L-2918"><span class="linenos">2918</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2919"><a href="#L-2919"><span class="linenos">2919</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">]</span>
-</span><span id="L-2920"><a href="#L-2920"><span class="linenos">2920</span></a> <span class="p">)</span>
-</span><span id="L-2921"><a href="#L-2921"><span class="linenos">2921</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
-</span><span id="L-2922"><a href="#L-2922"><span class="linenos">2922</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;CONTAINED IN&quot;</span>
-</span><span id="L-2923"><a href="#L-2923"><span class="linenos">2923</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2924"><a href="#L-2924"><span class="linenos">2924</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
-</span><span id="L-2925"><a href="#L-2925"><span class="linenos">2925</span></a> <span class="p">)</span>
-</span><span id="L-2926"><a href="#L-2926"><span class="linenos">2926</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
-</span><span id="L-2927"><a href="#L-2927"><span class="linenos">2927</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ALL&quot;</span>
-</span><span id="L-2928"><a href="#L-2928"><span class="linenos">2928</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2929"><a href="#L-2929"><span class="linenos">2929</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-2930"><a href="#L-2930"><span class="linenos">2930</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
-</span><span id="L-2931"><a href="#L-2931"><span class="linenos">2931</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;AS OF&quot;</span>
-</span><span id="L-2932"><a href="#L-2932"><span class="linenos">2932</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="L-2933"><a href="#L-2933"><span class="linenos">2933</span></a>
-</span><span id="L-2934"><a href="#L-2934"><span class="linenos">2934</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="L-2935"><a href="#L-2935"><span class="linenos">2935</span></a>
-</span><span id="L-2936"><a href="#L-2936"><span class="linenos">2936</span></a> <span class="k">def</span> <span class="nf">_parse_unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">]:</span>
-</span><span id="L-2937"><a href="#L-2937"><span class="linenos">2937</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">):</span>
-</span><span id="L-2938"><a href="#L-2938"><span class="linenos">2938</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2905"><a href="#L-2905"><span class="linenos">2905</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">):</span>
+</span><span id="L-2906"><a href="#L-2906"><span class="linenos">2906</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;ordinality&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="L-2907"><a href="#L-2907"><span class="linenos">2907</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="L-2908"><a href="#L-2908"><span class="linenos">2908</span></a>
+</span><span id="L-2909"><a href="#L-2909"><span class="linenos">2909</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-2910"><a href="#L-2910"><span class="linenos">2910</span></a>
+</span><span id="L-2911"><a href="#L-2911"><span class="linenos">2911</span></a> <span class="k">def</span> <span class="nf">_parse_version</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">]:</span>
+</span><span id="L-2912"><a href="#L-2912"><span class="linenos">2912</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
+</span><span id="L-2913"><a href="#L-2913"><span class="linenos">2913</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;TIMESTAMP&quot;</span>
+</span><span id="L-2914"><a href="#L-2914"><span class="linenos">2914</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">):</span>
+</span><span id="L-2915"><a href="#L-2915"><span class="linenos">2915</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;VERSION&quot;</span>
+</span><span id="L-2916"><a href="#L-2916"><span class="linenos">2916</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2917"><a href="#L-2917"><span class="linenos">2917</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2918"><a href="#L-2918"><span class="linenos">2918</span></a>
+</span><span id="L-2919"><a href="#L-2919"><span class="linenos">2919</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
+</span><span id="L-2920"><a href="#L-2920"><span class="linenos">2920</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-2921"><a href="#L-2921"><span class="linenos">2921</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-2922"><a href="#L-2922"><span class="linenos">2922</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
+</span><span id="L-2923"><a href="#L-2923"><span class="linenos">2923</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-2924"><a href="#L-2924"><span class="linenos">2924</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2925"><a href="#L-2925"><span class="linenos">2925</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">]</span>
+</span><span id="L-2926"><a href="#L-2926"><span class="linenos">2926</span></a> <span class="p">)</span>
+</span><span id="L-2927"><a href="#L-2927"><span class="linenos">2927</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
+</span><span id="L-2928"><a href="#L-2928"><span class="linenos">2928</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;CONTAINED IN&quot;</span>
+</span><span id="L-2929"><a href="#L-2929"><span class="linenos">2929</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2930"><a href="#L-2930"><span class="linenos">2930</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="L-2931"><a href="#L-2931"><span class="linenos">2931</span></a> <span class="p">)</span>
+</span><span id="L-2932"><a href="#L-2932"><span class="linenos">2932</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
+</span><span id="L-2933"><a href="#L-2933"><span class="linenos">2933</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ALL&quot;</span>
+</span><span id="L-2934"><a href="#L-2934"><span class="linenos">2934</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2935"><a href="#L-2935"><span class="linenos">2935</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-2936"><a href="#L-2936"><span class="linenos">2936</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
+</span><span id="L-2937"><a href="#L-2937"><span class="linenos">2937</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;AS OF&quot;</span>
+</span><span id="L-2938"><a href="#L-2938"><span class="linenos">2938</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
</span><span id="L-2939"><a href="#L-2939"><span class="linenos">2939</span></a>
-</span><span id="L-2940"><a href="#L-2940"><span class="linenos">2940</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
-</span><span id="L-2941"><a href="#L-2941"><span class="linenos">2941</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">)</span>
-</span><span id="L-2942"><a href="#L-2942"><span class="linenos">2942</span></a>
-</span><span id="L-2943"><a href="#L-2943"><span class="linenos">2943</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">with_alias</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-2944"><a href="#L-2944"><span class="linenos">2944</span></a>
-</span><span id="L-2945"><a href="#L-2945"><span class="linenos">2945</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-2946"><a href="#L-2946"><span class="linenos">2946</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
-</span><span id="L-2947"><a href="#L-2947"><span class="linenos">2947</span></a> <span class="k">if</span> <span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">):</span>
-</span><span id="L-2948"><a href="#L-2948"><span class="linenos">2948</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unexpected extra column alias in unnest.&quot;</span><span class="p">)</span>
-</span><span id="L-2949"><a href="#L-2949"><span class="linenos">2949</span></a>
-</span><span id="L-2950"><a href="#L-2950"><span class="linenos">2950</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">])</span>
-</span><span id="L-2951"><a href="#L-2951"><span class="linenos">2951</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-2952"><a href="#L-2952"><span class="linenos">2952</span></a>
-</span><span id="L-2953"><a href="#L-2953"><span class="linenos">2953</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="L-2954"><a href="#L-2954"><span class="linenos">2954</span></a> <span class="k">if</span> <span class="n">offset</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">):</span>
-</span><span id="L-2955"><a href="#L-2955"><span class="linenos">2955</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">columns</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="L-2956"><a href="#L-2956"><span class="linenos">2956</span></a>
-</span><span id="L-2957"><a href="#L-2957"><span class="linenos">2957</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">offset</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
-</span><span id="L-2958"><a href="#L-2958"><span class="linenos">2958</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
-</span><span id="L-2959"><a href="#L-2959"><span class="linenos">2959</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
-</span><span id="L-2960"><a href="#L-2960"><span class="linenos">2960</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_OFFSET_ALIAS_TOKENS</span>
-</span><span id="L-2961"><a href="#L-2961"><span class="linenos">2961</span></a> <span class="p">)</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">)</span>
+</span><span id="L-2940"><a href="#L-2940"><span class="linenos">2940</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="L-2941"><a href="#L-2941"><span class="linenos">2941</span></a>
+</span><span id="L-2942"><a href="#L-2942"><span class="linenos">2942</span></a> <span class="k">def</span> <span class="nf">_parse_unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">]:</span>
+</span><span id="L-2943"><a href="#L-2943"><span class="linenos">2943</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">):</span>
+</span><span id="L-2944"><a href="#L-2944"><span class="linenos">2944</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2945"><a href="#L-2945"><span class="linenos">2945</span></a>
+</span><span id="L-2946"><a href="#L-2946"><span class="linenos">2946</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
+</span><span id="L-2947"><a href="#L-2947"><span class="linenos">2947</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">)</span>
+</span><span id="L-2948"><a href="#L-2948"><span class="linenos">2948</span></a>
+</span><span id="L-2949"><a href="#L-2949"><span class="linenos">2949</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">with_alias</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-2950"><a href="#L-2950"><span class="linenos">2950</span></a>
+</span><span id="L-2951"><a href="#L-2951"><span class="linenos">2951</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-2952"><a href="#L-2952"><span class="linenos">2952</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
+</span><span id="L-2953"><a href="#L-2953"><span class="linenos">2953</span></a> <span class="k">if</span> <span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">):</span>
+</span><span id="L-2954"><a href="#L-2954"><span class="linenos">2954</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unexpected extra column alias in unnest.&quot;</span><span class="p">)</span>
+</span><span id="L-2955"><a href="#L-2955"><span class="linenos">2955</span></a>
+</span><span id="L-2956"><a href="#L-2956"><span class="linenos">2956</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">])</span>
+</span><span id="L-2957"><a href="#L-2957"><span class="linenos">2957</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-2958"><a href="#L-2958"><span class="linenos">2958</span></a>
+</span><span id="L-2959"><a href="#L-2959"><span class="linenos">2959</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="L-2960"><a href="#L-2960"><span class="linenos">2960</span></a> <span class="k">if</span> <span class="n">offset</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">):</span>
+</span><span id="L-2961"><a href="#L-2961"><span class="linenos">2961</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">columns</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
</span><span id="L-2962"><a href="#L-2962"><span class="linenos">2962</span></a>
-</span><span id="L-2963"><a href="#L-2963"><span class="linenos">2963</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
-</span><span id="L-2964"><a href="#L-2964"><span class="linenos">2964</span></a>
-</span><span id="L-2965"><a href="#L-2965"><span class="linenos">2965</span></a> <span class="k">def</span> <span class="nf">_parse_derived_table_values</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">]:</span>
-</span><span id="L-2966"><a href="#L-2966"><span class="linenos">2966</span></a> <span class="n">is_derived</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">)</span>
-</span><span id="L-2967"><a href="#L-2967"><span class="linenos">2967</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_derived</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">):</span>
-</span><span id="L-2968"><a href="#L-2968"><span class="linenos">2968</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-2969"><a href="#L-2969"><span class="linenos">2969</span></a>
-</span><span id="L-2970"><a href="#L-2970"><span class="linenos">2970</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">)</span>
-</span><span id="L-2971"><a href="#L-2971"><span class="linenos">2971</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
-</span><span id="L-2972"><a href="#L-2972"><span class="linenos">2972</span></a>
-</span><span id="L-2973"><a href="#L-2973"><span class="linenos">2973</span></a> <span class="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
-</span><span id="L-2974"><a href="#L-2974"><span class="linenos">2974</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-2963"><a href="#L-2963"><span class="linenos">2963</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">offset</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
+</span><span id="L-2964"><a href="#L-2964"><span class="linenos">2964</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
+</span><span id="L-2965"><a href="#L-2965"><span class="linenos">2965</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
+</span><span id="L-2966"><a href="#L-2966"><span class="linenos">2966</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_OFFSET_ALIAS_TOKENS</span>
+</span><span id="L-2967"><a href="#L-2967"><span class="linenos">2967</span></a> <span class="p">)</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">)</span>
+</span><span id="L-2968"><a href="#L-2968"><span class="linenos">2968</span></a>
+</span><span id="L-2969"><a href="#L-2969"><span class="linenos">2969</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
+</span><span id="L-2970"><a href="#L-2970"><span class="linenos">2970</span></a>
+</span><span id="L-2971"><a href="#L-2971"><span class="linenos">2971</span></a> <span class="k">def</span> <span class="nf">_parse_derived_table_values</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">]:</span>
+</span><span id="L-2972"><a href="#L-2972"><span class="linenos">2972</span></a> <span class="n">is_derived</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">)</span>
+</span><span id="L-2973"><a href="#L-2973"><span class="linenos">2973</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_derived</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">):</span>
+</span><span id="L-2974"><a href="#L-2974"><span class="linenos">2974</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-2975"><a href="#L-2975"><span class="linenos">2975</span></a>
-</span><span id="L-2976"><a href="#L-2976"><span class="linenos">2976</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-2977"><a href="#L-2977"><span class="linenos">2977</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
-</span><span id="L-2978"><a href="#L-2978"><span class="linenos">2978</span></a> <span class="p">)</span>
-</span><span id="L-2979"><a href="#L-2979"><span class="linenos">2979</span></a>
-</span><span id="L-2980"><a href="#L-2980"><span class="linenos">2980</span></a> <span class="k">def</span> <span class="nf">_parse_table_sample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">as_modifier</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">]:</span>
-</span><span id="L-2981"><a href="#L-2981"><span class="linenos">2981</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
-</span><span id="L-2982"><a href="#L-2982"><span class="linenos">2982</span></a> <span class="n">as_modifier</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;USING&quot;</span><span class="p">,</span> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">)</span>
-</span><span id="L-2983"><a href="#L-2983"><span class="linenos">2983</span></a> <span class="p">):</span>
-</span><span id="L-2984"><a href="#L-2984"><span class="linenos">2984</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2976"><a href="#L-2976"><span class="linenos">2976</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">)</span>
+</span><span id="L-2977"><a href="#L-2977"><span class="linenos">2977</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
+</span><span id="L-2978"><a href="#L-2978"><span class="linenos">2978</span></a>
+</span><span id="L-2979"><a href="#L-2979"><span class="linenos">2979</span></a> <span class="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
+</span><span id="L-2980"><a href="#L-2980"><span class="linenos">2980</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-2981"><a href="#L-2981"><span class="linenos">2981</span></a>
+</span><span id="L-2982"><a href="#L-2982"><span class="linenos">2982</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-2983"><a href="#L-2983"><span class="linenos">2983</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
+</span><span id="L-2984"><a href="#L-2984"><span class="linenos">2984</span></a> <span class="p">)</span>
</span><span id="L-2985"><a href="#L-2985"><span class="linenos">2985</span></a>
-</span><span id="L-2986"><a href="#L-2986"><span class="linenos">2986</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2987"><a href="#L-2987"><span class="linenos">2987</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2988"><a href="#L-2988"><span class="linenos">2988</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2989"><a href="#L-2989"><span class="linenos">2989</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2990"><a href="#L-2990"><span class="linenos">2990</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2991"><a href="#L-2991"><span class="linenos">2991</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2992"><a href="#L-2992"><span class="linenos">2992</span></a>
-</span><span id="L-2993"><a href="#L-2993"><span class="linenos">2993</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,),</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-2994"><a href="#L-2994"><span class="linenos">2994</span></a> <span class="n">matched_l_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
-</span><span id="L-2995"><a href="#L-2995"><span class="linenos">2995</span></a>
-</span><span id="L-2996"><a href="#L-2996"><span class="linenos">2996</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_CSV</span><span class="p">:</span>
-</span><span id="L-2997"><a href="#L-2997"><span class="linenos">2997</span></a> <span class="n">num</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-2998"><a href="#L-2998"><span class="linenos">2998</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">)</span>
-</span><span id="L-2999"><a href="#L-2999"><span class="linenos">2999</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3000"><a href="#L-3000"><span class="linenos">3000</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3001"><a href="#L-3001"><span class="linenos">3001</span></a> <span class="n">num</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-3002"><a href="#L-3002"><span class="linenos">3002</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">()</span>
-</span><span id="L-3003"><a href="#L-3003"><span class="linenos">3003</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-3004"><a href="#L-3004"><span class="linenos">3004</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="L-3005"><a href="#L-3005"><span class="linenos">3005</span></a> <span class="p">)</span>
-</span><span id="L-3006"><a href="#L-3006"><span class="linenos">3006</span></a>
-</span><span id="L-3007"><a href="#L-3007"><span class="linenos">3007</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKET&quot;</span><span class="p">):</span>
-</span><span id="L-3008"><a href="#L-3008"><span class="linenos">3008</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="L-3009"><a href="#L-3009"><span class="linenos">3009</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUT&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
-</span><span id="L-3010"><a href="#L-3010"><span class="linenos">3010</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="L-3011"><a href="#L-3011"><span class="linenos">3011</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
-</span><span id="L-3012"><a href="#L-3012"><span class="linenos">3012</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="L-3013"><a href="#L-3013"><span class="linenos">3013</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">)):</span>
-</span><span id="L-3014"><a href="#L-3014"><span class="linenos">3014</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="L-3015"><a href="#L-3015"><span class="linenos">3015</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
-</span><span id="L-3016"><a href="#L-3016"><span class="linenos">3016</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="L-3017"><a href="#L-3017"><span class="linenos">3017</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3018"><a href="#L-3018"><span class="linenos">3018</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="L-3019"><a href="#L-3019"><span class="linenos">3019</span></a>
-</span><span id="L-3020"><a href="#L-3020"><span class="linenos">3020</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
-</span><span id="L-3021"><a href="#L-3021"><span class="linenos">3021</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-3022"><a href="#L-3022"><span class="linenos">3022</span></a>
-</span><span id="L-3023"><a href="#L-3023"><span class="linenos">3023</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-3024"><a href="#L-3024"><span class="linenos">3024</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3025"><a href="#L-3025"><span class="linenos">3025</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="L-3026"><a href="#L-3026"><span class="linenos">3026</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-3027"><a href="#L-3027"><span class="linenos">3027</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="s2">&quot;REPEATABLE&quot;</span><span class="p">)):</span>
-</span><span id="L-3028"><a href="#L-3028"><span class="linenos">3028</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">)</span>
-</span><span id="L-3029"><a href="#L-3029"><span class="linenos">3029</span></a>
-</span><span id="L-3030"><a href="#L-3030"><span class="linenos">3030</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3031"><a href="#L-3031"><span class="linenos">3031</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="L-3032"><a href="#L-3032"><span class="linenos">3032</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-3033"><a href="#L-3033"><span class="linenos">3033</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
-</span><span id="L-3034"><a href="#L-3034"><span class="linenos">3034</span></a> <span class="n">bucket_numerator</span><span class="o">=</span><span class="n">bucket_numerator</span><span class="p">,</span>
-</span><span id="L-3035"><a href="#L-3035"><span class="linenos">3035</span></a> <span class="n">bucket_denominator</span><span class="o">=</span><span class="n">bucket_denominator</span><span class="p">,</span>
-</span><span id="L-3036"><a href="#L-3036"><span class="linenos">3036</span></a> <span class="n">bucket_field</span><span class="o">=</span><span class="n">bucket_field</span><span class="p">,</span>
-</span><span id="L-3037"><a href="#L-3037"><span class="linenos">3037</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="L-3038"><a href="#L-3038"><span class="linenos">3038</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
-</span><span id="L-3039"><a href="#L-3039"><span class="linenos">3039</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
-</span><span id="L-3040"><a href="#L-3040"><span class="linenos">3040</span></a> <span class="p">)</span>
-</span><span id="L-3041"><a href="#L-3041"><span class="linenos">3041</span></a>
-</span><span id="L-3042"><a href="#L-3042"><span class="linenos">3042</span></a> <span class="k">def</span> <span class="nf">_parse_pivots</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]]:</span>
-</span><span id="L-3043"><a href="#L-3043"><span class="linenos">3043</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
-</span><span id="L-3044"><a href="#L-3044"><span class="linenos">3044</span></a>
-</span><span id="L-3045"><a href="#L-3045"><span class="linenos">3045</span></a> <span class="k">def</span> <span class="nf">_parse_joins</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]]:</span>
-</span><span id="L-3046"><a href="#L-3046"><span class="linenos">3046</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="L-2986"><a href="#L-2986"><span class="linenos">2986</span></a> <span class="k">def</span> <span class="nf">_parse_table_sample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">as_modifier</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">]:</span>
+</span><span id="L-2987"><a href="#L-2987"><span class="linenos">2987</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
+</span><span id="L-2988"><a href="#L-2988"><span class="linenos">2988</span></a> <span class="n">as_modifier</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;USING&quot;</span><span class="p">,</span> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">)</span>
+</span><span id="L-2989"><a href="#L-2989"><span class="linenos">2989</span></a> <span class="p">):</span>
+</span><span id="L-2990"><a href="#L-2990"><span class="linenos">2990</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-2991"><a href="#L-2991"><span class="linenos">2991</span></a>
+</span><span id="L-2992"><a href="#L-2992"><span class="linenos">2992</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2993"><a href="#L-2993"><span class="linenos">2993</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2994"><a href="#L-2994"><span class="linenos">2994</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2995"><a href="#L-2995"><span class="linenos">2995</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2996"><a href="#L-2996"><span class="linenos">2996</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2997"><a href="#L-2997"><span class="linenos">2997</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-2998"><a href="#L-2998"><span class="linenos">2998</span></a>
+</span><span id="L-2999"><a href="#L-2999"><span class="linenos">2999</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,),</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3000"><a href="#L-3000"><span class="linenos">3000</span></a> <span class="n">matched_l_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
+</span><span id="L-3001"><a href="#L-3001"><span class="linenos">3001</span></a>
+</span><span id="L-3002"><a href="#L-3002"><span class="linenos">3002</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_CSV</span><span class="p">:</span>
+</span><span id="L-3003"><a href="#L-3003"><span class="linenos">3003</span></a> <span class="n">num</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3004"><a href="#L-3004"><span class="linenos">3004</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">)</span>
+</span><span id="L-3005"><a href="#L-3005"><span class="linenos">3005</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3006"><a href="#L-3006"><span class="linenos">3006</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3007"><a href="#L-3007"><span class="linenos">3007</span></a> <span class="n">num</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-3008"><a href="#L-3008"><span class="linenos">3008</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">()</span>
+</span><span id="L-3009"><a href="#L-3009"><span class="linenos">3009</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3010"><a href="#L-3010"><span class="linenos">3010</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-3011"><a href="#L-3011"><span class="linenos">3011</span></a> <span class="p">)</span>
+</span><span id="L-3012"><a href="#L-3012"><span class="linenos">3012</span></a>
+</span><span id="L-3013"><a href="#L-3013"><span class="linenos">3013</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKET&quot;</span><span class="p">):</span>
+</span><span id="L-3014"><a href="#L-3014"><span class="linenos">3014</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="L-3015"><a href="#L-3015"><span class="linenos">3015</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUT&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
+</span><span id="L-3016"><a href="#L-3016"><span class="linenos">3016</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="L-3017"><a href="#L-3017"><span class="linenos">3017</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
+</span><span id="L-3018"><a href="#L-3018"><span class="linenos">3018</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="L-3019"><a href="#L-3019"><span class="linenos">3019</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">)):</span>
+</span><span id="L-3020"><a href="#L-3020"><span class="linenos">3020</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="L-3021"><a href="#L-3021"><span class="linenos">3021</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
+</span><span id="L-3022"><a href="#L-3022"><span class="linenos">3022</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="L-3023"><a href="#L-3023"><span class="linenos">3023</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3024"><a href="#L-3024"><span class="linenos">3024</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="L-3025"><a href="#L-3025"><span class="linenos">3025</span></a>
+</span><span id="L-3026"><a href="#L-3026"><span class="linenos">3026</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
+</span><span id="L-3027"><a href="#L-3027"><span class="linenos">3027</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-3028"><a href="#L-3028"><span class="linenos">3028</span></a>
+</span><span id="L-3029"><a href="#L-3029"><span class="linenos">3029</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-3030"><a href="#L-3030"><span class="linenos">3030</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3031"><a href="#L-3031"><span class="linenos">3031</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="L-3032"><a href="#L-3032"><span class="linenos">3032</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-3033"><a href="#L-3033"><span class="linenos">3033</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="s2">&quot;REPEATABLE&quot;</span><span class="p">)):</span>
+</span><span id="L-3034"><a href="#L-3034"><span class="linenos">3034</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">)</span>
+</span><span id="L-3035"><a href="#L-3035"><span class="linenos">3035</span></a>
+</span><span id="L-3036"><a href="#L-3036"><span class="linenos">3036</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3037"><a href="#L-3037"><span class="linenos">3037</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
+</span><span id="L-3038"><a href="#L-3038"><span class="linenos">3038</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-3039"><a href="#L-3039"><span class="linenos">3039</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
+</span><span id="L-3040"><a href="#L-3040"><span class="linenos">3040</span></a> <span class="n">bucket_numerator</span><span class="o">=</span><span class="n">bucket_numerator</span><span class="p">,</span>
+</span><span id="L-3041"><a href="#L-3041"><span class="linenos">3041</span></a> <span class="n">bucket_denominator</span><span class="o">=</span><span class="n">bucket_denominator</span><span class="p">,</span>
+</span><span id="L-3042"><a href="#L-3042"><span class="linenos">3042</span></a> <span class="n">bucket_field</span><span class="o">=</span><span class="n">bucket_field</span><span class="p">,</span>
+</span><span id="L-3043"><a href="#L-3043"><span class="linenos">3043</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="L-3044"><a href="#L-3044"><span class="linenos">3044</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
+</span><span id="L-3045"><a href="#L-3045"><span class="linenos">3045</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
+</span><span id="L-3046"><a href="#L-3046"><span class="linenos">3046</span></a> <span class="p">)</span>
</span><span id="L-3047"><a href="#L-3047"><span class="linenos">3047</span></a>
-</span><span id="L-3048"><a href="#L-3048"><span class="linenos">3048</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
-</span><span id="L-3049"><a href="#L-3049"><span class="linenos">3049</span></a> <span class="k">def</span> <span class="nf">_parse_simplified_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span>
-</span><span id="L-3050"><a href="#L-3050"><span class="linenos">3050</span></a> <span class="k">def</span> <span class="nf">_parse_on</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3051"><a href="#L-3051"><span class="linenos">3051</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-3052"><a href="#L-3052"><span class="linenos">3052</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="L-3048"><a href="#L-3048"><span class="linenos">3048</span></a> <span class="k">def</span> <span class="nf">_parse_pivots</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]]:</span>
+</span><span id="L-3049"><a href="#L-3049"><span class="linenos">3049</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="L-3050"><a href="#L-3050"><span class="linenos">3050</span></a>
+</span><span id="L-3051"><a href="#L-3051"><span class="linenos">3051</span></a> <span class="k">def</span> <span class="nf">_parse_joins</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]]:</span>
+</span><span id="L-3052"><a href="#L-3052"><span class="linenos">3052</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="L-3053"><a href="#L-3053"><span class="linenos">3053</span></a>
-</span><span id="L-3054"><a href="#L-3054"><span class="linenos">3054</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="L-3055"><a href="#L-3055"><span class="linenos">3055</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_on</span><span class="p">)</span>
-</span><span id="L-3056"><a href="#L-3056"><span class="linenos">3056</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="L-3057"><a href="#L-3057"><span class="linenos">3057</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
-</span><span id="L-3058"><a href="#L-3058"><span class="linenos">3058</span></a> <span class="p">)</span>
-</span><span id="L-3059"><a href="#L-3059"><span class="linenos">3059</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
-</span><span id="L-3060"><a href="#L-3060"><span class="linenos">3060</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3061"><a href="#L-3061"><span class="linenos">3061</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span> <span class="n">group</span><span class="o">=</span><span class="n">group</span>
-</span><span id="L-3062"><a href="#L-3062"><span class="linenos">3062</span></a> <span class="p">)</span>
-</span><span id="L-3063"><a href="#L-3063"><span class="linenos">3063</span></a>
-</span><span id="L-3064"><a href="#L-3064"><span class="linenos">3064</span></a> <span class="k">def</span> <span class="nf">_parse_pivot_in</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
-</span><span id="L-3065"><a href="#L-3065"><span class="linenos">3065</span></a> <span class="k">def</span> <span class="nf">_parse_aliased_expression</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3066"><a href="#L-3066"><span class="linenos">3066</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-3067"><a href="#L-3067"><span class="linenos">3067</span></a>
-</span><span id="L-3068"><a href="#L-3068"><span class="linenos">3068</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
-</span><span id="L-3069"><a href="#L-3069"><span class="linenos">3069</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="L-3070"><a href="#L-3070"><span class="linenos">3070</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-3071"><a href="#L-3071"><span class="linenos">3071</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PivotAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="L-3072"><a href="#L-3072"><span class="linenos">3072</span></a>
-</span><span id="L-3073"><a href="#L-3073"><span class="linenos">3073</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3074"><a href="#L-3074"><span class="linenos">3074</span></a>
-</span><span id="L-3075"><a href="#L-3075"><span class="linenos">3075</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-3076"><a href="#L-3076"><span class="linenos">3076</span></a>
-</span><span id="L-3077"><a href="#L-3077"><span class="linenos">3077</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-3078"><a href="#L-3078"><span class="linenos">3078</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting IN (&quot;</span><span class="p">)</span>
-</span><span id="L-3079"><a href="#L-3079"><span class="linenos">3079</span></a>
-</span><span id="L-3080"><a href="#L-3080"><span class="linenos">3080</span></a> <span class="n">aliased_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_aliased_expression</span><span class="p">)</span>
-</span><span id="L-3081"><a href="#L-3081"><span class="linenos">3081</span></a>
-</span><span id="L-3082"><a href="#L-3082"><span class="linenos">3082</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-3083"><a href="#L-3083"><span class="linenos">3083</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">aliased_expressions</span><span class="p">)</span>
-</span><span id="L-3084"><a href="#L-3084"><span class="linenos">3084</span></a>
-</span><span id="L-3085"><a href="#L-3085"><span class="linenos">3085</span></a> <span class="k">def</span> <span class="nf">_parse_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]:</span>
-</span><span id="L-3086"><a href="#L-3086"><span class="linenos">3086</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3087"><a href="#L-3087"><span class="linenos">3087</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3088"><a href="#L-3088"><span class="linenos">3088</span></a>
-</span><span id="L-3089"><a href="#L-3089"><span class="linenos">3089</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">):</span>
-</span><span id="L-3090"><a href="#L-3090"><span class="linenos">3090</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3091"><a href="#L-3091"><span class="linenos">3091</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">):</span>
-</span><span id="L-3092"><a href="#L-3092"><span class="linenos">3092</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3093"><a href="#L-3093"><span class="linenos">3093</span></a>
-</span><span id="L-3094"><a href="#L-3094"><span class="linenos">3094</span></a> <span class="c1"># https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-qry-select-unpivot.html#syntax</span>
-</span><span id="L-3095"><a href="#L-3095"><span class="linenos">3095</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="L-3096"><a href="#L-3096"><span class="linenos">3096</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3097"><a href="#L-3097"><span class="linenos">3097</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;EXCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="L-3098"><a href="#L-3098"><span class="linenos">3098</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3099"><a href="#L-3099"><span class="linenos">3099</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3100"><a href="#L-3100"><span class="linenos">3100</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3101"><a href="#L-3101"><span class="linenos">3101</span></a>
-</span><span id="L-3102"><a href="#L-3102"><span class="linenos">3102</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-3103"><a href="#L-3103"><span class="linenos">3103</span></a>
-</span><span id="L-3104"><a href="#L-3104"><span class="linenos">3104</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-3105"><a href="#L-3105"><span class="linenos">3105</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3054"><a href="#L-3054"><span class="linenos">3054</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
+</span><span id="L-3055"><a href="#L-3055"><span class="linenos">3055</span></a> <span class="k">def</span> <span class="nf">_parse_simplified_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span>
+</span><span id="L-3056"><a href="#L-3056"><span class="linenos">3056</span></a> <span class="k">def</span> <span class="nf">_parse_on</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3057"><a href="#L-3057"><span class="linenos">3057</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-3058"><a href="#L-3058"><span class="linenos">3058</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="L-3059"><a href="#L-3059"><span class="linenos">3059</span></a>
+</span><span id="L-3060"><a href="#L-3060"><span class="linenos">3060</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="L-3061"><a href="#L-3061"><span class="linenos">3061</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_on</span><span class="p">)</span>
+</span><span id="L-3062"><a href="#L-3062"><span class="linenos">3062</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="L-3063"><a href="#L-3063"><span class="linenos">3063</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
+</span><span id="L-3064"><a href="#L-3064"><span class="linenos">3064</span></a> <span class="p">)</span>
+</span><span id="L-3065"><a href="#L-3065"><span class="linenos">3065</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
+</span><span id="L-3066"><a href="#L-3066"><span class="linenos">3066</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3067"><a href="#L-3067"><span class="linenos">3067</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span> <span class="n">group</span><span class="o">=</span><span class="n">group</span>
+</span><span id="L-3068"><a href="#L-3068"><span class="linenos">3068</span></a> <span class="p">)</span>
+</span><span id="L-3069"><a href="#L-3069"><span class="linenos">3069</span></a>
+</span><span id="L-3070"><a href="#L-3070"><span class="linenos">3070</span></a> <span class="k">def</span> <span class="nf">_parse_pivot_in</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
+</span><span id="L-3071"><a href="#L-3071"><span class="linenos">3071</span></a> <span class="k">def</span> <span class="nf">_parse_aliased_expression</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3072"><a href="#L-3072"><span class="linenos">3072</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-3073"><a href="#L-3073"><span class="linenos">3073</span></a>
+</span><span id="L-3074"><a href="#L-3074"><span class="linenos">3074</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
+</span><span id="L-3075"><a href="#L-3075"><span class="linenos">3075</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="L-3076"><a href="#L-3076"><span class="linenos">3076</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-3077"><a href="#L-3077"><span class="linenos">3077</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PivotAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="L-3078"><a href="#L-3078"><span class="linenos">3078</span></a>
+</span><span id="L-3079"><a href="#L-3079"><span class="linenos">3079</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3080"><a href="#L-3080"><span class="linenos">3080</span></a>
+</span><span id="L-3081"><a href="#L-3081"><span class="linenos">3081</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-3082"><a href="#L-3082"><span class="linenos">3082</span></a>
+</span><span id="L-3083"><a href="#L-3083"><span class="linenos">3083</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-3084"><a href="#L-3084"><span class="linenos">3084</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting IN (&quot;</span><span class="p">)</span>
+</span><span id="L-3085"><a href="#L-3085"><span class="linenos">3085</span></a>
+</span><span id="L-3086"><a href="#L-3086"><span class="linenos">3086</span></a> <span class="n">aliased_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_aliased_expression</span><span class="p">)</span>
+</span><span id="L-3087"><a href="#L-3087"><span class="linenos">3087</span></a>
+</span><span id="L-3088"><a href="#L-3088"><span class="linenos">3088</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-3089"><a href="#L-3089"><span class="linenos">3089</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">aliased_expressions</span><span class="p">)</span>
+</span><span id="L-3090"><a href="#L-3090"><span class="linenos">3090</span></a>
+</span><span id="L-3091"><a href="#L-3091"><span class="linenos">3091</span></a> <span class="k">def</span> <span class="nf">_parse_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]:</span>
+</span><span id="L-3092"><a href="#L-3092"><span class="linenos">3092</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-3093"><a href="#L-3093"><span class="linenos">3093</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3094"><a href="#L-3094"><span class="linenos">3094</span></a>
+</span><span id="L-3095"><a href="#L-3095"><span class="linenos">3095</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">):</span>
+</span><span id="L-3096"><a href="#L-3096"><span class="linenos">3096</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3097"><a href="#L-3097"><span class="linenos">3097</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">):</span>
+</span><span id="L-3098"><a href="#L-3098"><span class="linenos">3098</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3099"><a href="#L-3099"><span class="linenos">3099</span></a>
+</span><span id="L-3100"><a href="#L-3100"><span class="linenos">3100</span></a> <span class="c1"># https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-qry-select-unpivot.html#syntax</span>
+</span><span id="L-3101"><a href="#L-3101"><span class="linenos">3101</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="L-3102"><a href="#L-3102"><span class="linenos">3102</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3103"><a href="#L-3103"><span class="linenos">3103</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;EXCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="L-3104"><a href="#L-3104"><span class="linenos">3104</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3105"><a href="#L-3105"><span class="linenos">3105</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="L-3106"><a href="#L-3106"><span class="linenos">3106</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-3107"><a href="#L-3107"><span class="linenos">3107</span></a>
-</span><span id="L-3108"><a href="#L-3108"><span class="linenos">3108</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
-</span><span id="L-3109"><a href="#L-3109"><span class="linenos">3109</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="L-3110"><a href="#L-3110"><span class="linenos">3110</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3111"><a href="#L-3111"><span class="linenos">3111</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()))</span>
-</span><span id="L-3112"><a href="#L-3112"><span class="linenos">3112</span></a>
-</span><span id="L-3113"><a href="#L-3113"><span class="linenos">3113</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-3114"><a href="#L-3114"><span class="linenos">3114</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Failed to parse PIVOT&#39;s aggregation list&quot;</span><span class="p">)</span>
-</span><span id="L-3115"><a href="#L-3115"><span class="linenos">3115</span></a>
-</span><span id="L-3116"><a href="#L-3116"><span class="linenos">3116</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
-</span><span id="L-3117"><a href="#L-3117"><span class="linenos">3117</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting FOR&quot;</span><span class="p">)</span>
+</span><span id="L-3108"><a href="#L-3108"><span class="linenos">3108</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-3109"><a href="#L-3109"><span class="linenos">3109</span></a>
+</span><span id="L-3110"><a href="#L-3110"><span class="linenos">3110</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-3111"><a href="#L-3111"><span class="linenos">3111</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3112"><a href="#L-3112"><span class="linenos">3112</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3113"><a href="#L-3113"><span class="linenos">3113</span></a>
+</span><span id="L-3114"><a href="#L-3114"><span class="linenos">3114</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
+</span><span id="L-3115"><a href="#L-3115"><span class="linenos">3115</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="L-3116"><a href="#L-3116"><span class="linenos">3116</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3117"><a href="#L-3117"><span class="linenos">3117</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()))</span>
</span><span id="L-3118"><a href="#L-3118"><span class="linenos">3118</span></a>
-</span><span id="L-3119"><a href="#L-3119"><span class="linenos">3119</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot_in</span><span class="p">()</span>
-</span><span id="L-3120"><a href="#L-3120"><span class="linenos">3120</span></a>
-</span><span id="L-3121"><a href="#L-3121"><span class="linenos">3121</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-3122"><a href="#L-3122"><span class="linenos">3122</span></a>
-</span><span id="L-3123"><a href="#L-3123"><span class="linenos">3123</span></a> <span class="n">pivot</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3124"><a href="#L-3124"><span class="linenos">3124</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span>
-</span><span id="L-3125"><a href="#L-3125"><span class="linenos">3125</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-3126"><a href="#L-3126"><span class="linenos">3126</span></a> <span class="n">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
-</span><span id="L-3127"><a href="#L-3127"><span class="linenos">3127</span></a> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">,</span>
-</span><span id="L-3128"><a href="#L-3128"><span class="linenos">3128</span></a> <span class="n">include_nulls</span><span class="o">=</span><span class="n">include_nulls</span><span class="p">,</span>
-</span><span id="L-3129"><a href="#L-3129"><span class="linenos">3129</span></a> <span class="p">)</span>
-</span><span id="L-3130"><a href="#L-3130"><span class="linenos">3130</span></a>
-</span><span id="L-3131"><a href="#L-3131"><span class="linenos">3131</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-3132"><a href="#L-3132"><span class="linenos">3132</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
-</span><span id="L-3133"><a href="#L-3133"><span class="linenos">3133</span></a>
-</span><span id="L-3134"><a href="#L-3134"><span class="linenos">3134</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unpivot</span><span class="p">:</span>
-</span><span id="L-3135"><a href="#L-3135"><span class="linenos">3135</span></a> <span class="n">names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">expressions</span><span class="p">))</span>
+</span><span id="L-3119"><a href="#L-3119"><span class="linenos">3119</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-3120"><a href="#L-3120"><span class="linenos">3120</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Failed to parse PIVOT&#39;s aggregation list&quot;</span><span class="p">)</span>
+</span><span id="L-3121"><a href="#L-3121"><span class="linenos">3121</span></a>
+</span><span id="L-3122"><a href="#L-3122"><span class="linenos">3122</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
+</span><span id="L-3123"><a href="#L-3123"><span class="linenos">3123</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting FOR&quot;</span><span class="p">)</span>
+</span><span id="L-3124"><a href="#L-3124"><span class="linenos">3124</span></a>
+</span><span id="L-3125"><a href="#L-3125"><span class="linenos">3125</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot_in</span><span class="p">()</span>
+</span><span id="L-3126"><a href="#L-3126"><span class="linenos">3126</span></a>
+</span><span id="L-3127"><a href="#L-3127"><span class="linenos">3127</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-3128"><a href="#L-3128"><span class="linenos">3128</span></a>
+</span><span id="L-3129"><a href="#L-3129"><span class="linenos">3129</span></a> <span class="n">pivot</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3130"><a href="#L-3130"><span class="linenos">3130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span>
+</span><span id="L-3131"><a href="#L-3131"><span class="linenos">3131</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-3132"><a href="#L-3132"><span class="linenos">3132</span></a> <span class="n">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
+</span><span id="L-3133"><a href="#L-3133"><span class="linenos">3133</span></a> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">,</span>
+</span><span id="L-3134"><a href="#L-3134"><span class="linenos">3134</span></a> <span class="n">include_nulls</span><span class="o">=</span><span class="n">include_nulls</span><span class="p">,</span>
+</span><span id="L-3135"><a href="#L-3135"><span class="linenos">3135</span></a> <span class="p">)</span>
</span><span id="L-3136"><a href="#L-3136"><span class="linenos">3136</span></a>
-</span><span id="L-3137"><a href="#L-3137"><span class="linenos">3137</span></a> <span class="n">columns</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-3138"><a href="#L-3138"><span class="linenos">3138</span></a> <span class="k">for</span> <span class="n">fld</span> <span class="ow">in</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;field&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-3139"><a href="#L-3139"><span class="linenos">3139</span></a> <span class="n">field_name</span> <span class="o">=</span> <span class="n">fld</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="k">else</span> <span class="n">fld</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="L-3140"><a href="#L-3140"><span class="linenos">3140</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
-</span><span id="L-3141"><a href="#L-3141"><span class="linenos">3141</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">PREFIXED_PIVOT_COLUMNS</span><span class="p">:</span>
-</span><span id="L-3142"><a href="#L-3142"><span class="linenos">3142</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
-</span><span id="L-3143"><a href="#L-3143"><span class="linenos">3143</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3144"><a href="#L-3144"><span class="linenos">3144</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
-</span><span id="L-3145"><a href="#L-3145"><span class="linenos">3145</span></a>
-</span><span id="L-3146"><a href="#L-3146"><span class="linenos">3146</span></a> <span class="n">columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
-</span><span id="L-3147"><a href="#L-3147"><span class="linenos">3147</span></a>
-</span><span id="L-3148"><a href="#L-3148"><span class="linenos">3148</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">columns</span><span class="p">)</span>
-</span><span id="L-3149"><a href="#L-3149"><span class="linenos">3149</span></a>
-</span><span id="L-3150"><a href="#L-3150"><span class="linenos">3150</span></a> <span class="k">return</span> <span class="n">pivot</span>
+</span><span id="L-3137"><a href="#L-3137"><span class="linenos">3137</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-3138"><a href="#L-3138"><span class="linenos">3138</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="L-3139"><a href="#L-3139"><span class="linenos">3139</span></a>
+</span><span id="L-3140"><a href="#L-3140"><span class="linenos">3140</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unpivot</span><span class="p">:</span>
+</span><span id="L-3141"><a href="#L-3141"><span class="linenos">3141</span></a> <span class="n">names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">expressions</span><span class="p">))</span>
+</span><span id="L-3142"><a href="#L-3142"><span class="linenos">3142</span></a>
+</span><span id="L-3143"><a href="#L-3143"><span class="linenos">3143</span></a> <span class="n">columns</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-3144"><a href="#L-3144"><span class="linenos">3144</span></a> <span class="k">for</span> <span class="n">fld</span> <span class="ow">in</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;field&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-3145"><a href="#L-3145"><span class="linenos">3145</span></a> <span class="n">field_name</span> <span class="o">=</span> <span class="n">fld</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="k">else</span> <span class="n">fld</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="L-3146"><a href="#L-3146"><span class="linenos">3146</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
+</span><span id="L-3147"><a href="#L-3147"><span class="linenos">3147</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">PREFIXED_PIVOT_COLUMNS</span><span class="p">:</span>
+</span><span id="L-3148"><a href="#L-3148"><span class="linenos">3148</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
+</span><span id="L-3149"><a href="#L-3149"><span class="linenos">3149</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3150"><a href="#L-3150"><span class="linenos">3150</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
</span><span id="L-3151"><a href="#L-3151"><span class="linenos">3151</span></a>
-</span><span id="L-3152"><a href="#L-3152"><span class="linenos">3152</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-3153"><a href="#L-3153"><span class="linenos">3153</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">]</span>
-</span><span id="L-3154"><a href="#L-3154"><span class="linenos">3154</span></a>
-</span><span id="L-3155"><a href="#L-3155"><span class="linenos">3155</span></a> <span class="k">def</span> <span class="nf">_parse_where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">]:</span>
-</span><span id="L-3156"><a href="#L-3156"><span class="linenos">3156</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_where_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">):</span>
-</span><span id="L-3157"><a href="#L-3157"><span class="linenos">3157</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3158"><a href="#L-3158"><span class="linenos">3158</span></a>
-</span><span id="L-3159"><a href="#L-3159"><span class="linenos">3159</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3160"><a href="#L-3160"><span class="linenos">3160</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-3161"><a href="#L-3161"><span class="linenos">3161</span></a> <span class="p">)</span>
-</span><span id="L-3162"><a href="#L-3162"><span class="linenos">3162</span></a>
-</span><span id="L-3163"><a href="#L-3163"><span class="linenos">3163</span></a> <span class="k">def</span> <span class="nf">_parse_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_group_by_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">]:</span>
-</span><span id="L-3164"><a href="#L-3164"><span class="linenos">3164</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_group_by_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">):</span>
-</span><span id="L-3165"><a href="#L-3165"><span class="linenos">3165</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3166"><a href="#L-3166"><span class="linenos">3166</span></a>
-</span><span id="L-3167"><a href="#L-3167"><span class="linenos">3167</span></a> <span class="n">elements</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
+</span><span id="L-3152"><a href="#L-3152"><span class="linenos">3152</span></a> <span class="n">columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
+</span><span id="L-3153"><a href="#L-3153"><span class="linenos">3153</span></a>
+</span><span id="L-3154"><a href="#L-3154"><span class="linenos">3154</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">columns</span><span class="p">)</span>
+</span><span id="L-3155"><a href="#L-3155"><span class="linenos">3155</span></a>
+</span><span id="L-3156"><a href="#L-3156"><span class="linenos">3156</span></a> <span class="k">return</span> <span class="n">pivot</span>
+</span><span id="L-3157"><a href="#L-3157"><span class="linenos">3157</span></a>
+</span><span id="L-3158"><a href="#L-3158"><span class="linenos">3158</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-3159"><a href="#L-3159"><span class="linenos">3159</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">]</span>
+</span><span id="L-3160"><a href="#L-3160"><span class="linenos">3160</span></a>
+</span><span id="L-3161"><a href="#L-3161"><span class="linenos">3161</span></a> <span class="k">def</span> <span class="nf">_parse_where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">]:</span>
+</span><span id="L-3162"><a href="#L-3162"><span class="linenos">3162</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_where_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">):</span>
+</span><span id="L-3163"><a href="#L-3163"><span class="linenos">3163</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3164"><a href="#L-3164"><span class="linenos">3164</span></a>
+</span><span id="L-3165"><a href="#L-3165"><span class="linenos">3165</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3166"><a href="#L-3166"><span class="linenos">3166</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-3167"><a href="#L-3167"><span class="linenos">3167</span></a> <span class="p">)</span>
</span><span id="L-3168"><a href="#L-3168"><span class="linenos">3168</span></a>
-</span><span id="L-3169"><a href="#L-3169"><span class="linenos">3169</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
-</span><span id="L-3170"><a href="#L-3170"><span class="linenos">3170</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">,</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3171"><a href="#L-3171"><span class="linenos">3171</span></a>
-</span><span id="L-3172"><a href="#L-3172"><span class="linenos">3172</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-3173"><a href="#L-3173"><span class="linenos">3173</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
-</span><span id="L-3174"><a href="#L-3174"><span class="linenos">3174</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-3175"><a href="#L-3175"><span class="linenos">3175</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;expressions&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-3176"><a href="#L-3176"><span class="linenos">3176</span></a>
-</span><span id="L-3177"><a href="#L-3177"><span class="linenos">3177</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_grouping_sets</span><span class="p">()</span>
-</span><span id="L-3178"><a href="#L-3178"><span class="linenos">3178</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
-</span><span id="L-3179"><a href="#L-3179"><span class="linenos">3179</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">)</span>
-</span><span id="L-3180"><a href="#L-3180"><span class="linenos">3180</span></a>
-</span><span id="L-3181"><a href="#L-3181"><span class="linenos">3181</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3182"><a href="#L-3182"><span class="linenos">3182</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3183"><a href="#L-3183"><span class="linenos">3183</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3184"><a href="#L-3184"><span class="linenos">3184</span></a>
-</span><span id="L-3185"><a href="#L-3185"><span class="linenos">3185</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3186"><a href="#L-3186"><span class="linenos">3186</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">)</span>
-</span><span id="L-3187"><a href="#L-3187"><span class="linenos">3187</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLUP</span><span class="p">):</span>
-</span><span id="L-3188"><a href="#L-3188"><span class="linenos">3188</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="L-3189"><a href="#L-3189"><span class="linenos">3189</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;rollup&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">rollup</span><span class="p">))</span>
+</span><span id="L-3169"><a href="#L-3169"><span class="linenos">3169</span></a> <span class="k">def</span> <span class="nf">_parse_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_group_by_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">]:</span>
+</span><span id="L-3170"><a href="#L-3170"><span class="linenos">3170</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_group_by_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">):</span>
+</span><span id="L-3171"><a href="#L-3171"><span class="linenos">3171</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3172"><a href="#L-3172"><span class="linenos">3172</span></a>
+</span><span id="L-3173"><a href="#L-3173"><span class="linenos">3173</span></a> <span class="n">elements</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
+</span><span id="L-3174"><a href="#L-3174"><span class="linenos">3174</span></a>
+</span><span id="L-3175"><a href="#L-3175"><span class="linenos">3175</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
+</span><span id="L-3176"><a href="#L-3176"><span class="linenos">3176</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">,</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3177"><a href="#L-3177"><span class="linenos">3177</span></a>
+</span><span id="L-3178"><a href="#L-3178"><span class="linenos">3178</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-3179"><a href="#L-3179"><span class="linenos">3179</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="L-3180"><a href="#L-3180"><span class="linenos">3180</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-3181"><a href="#L-3181"><span class="linenos">3181</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;expressions&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-3182"><a href="#L-3182"><span class="linenos">3182</span></a>
+</span><span id="L-3183"><a href="#L-3183"><span class="linenos">3183</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_grouping_sets</span><span class="p">()</span>
+</span><span id="L-3184"><a href="#L-3184"><span class="linenos">3184</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
+</span><span id="L-3185"><a href="#L-3185"><span class="linenos">3185</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">)</span>
+</span><span id="L-3186"><a href="#L-3186"><span class="linenos">3186</span></a>
+</span><span id="L-3187"><a href="#L-3187"><span class="linenos">3187</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3188"><a href="#L-3188"><span class="linenos">3188</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3189"><a href="#L-3189"><span class="linenos">3189</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3190"><a href="#L-3190"><span class="linenos">3190</span></a>
-</span><span id="L-3191"><a href="#L-3191"><span class="linenos">3191</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CUBE</span><span class="p">):</span>
-</span><span id="L-3192"><a href="#L-3192"><span class="linenos">3192</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="L-3193"><a href="#L-3193"><span class="linenos">3193</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;cube&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">cube</span><span class="p">))</span>
-</span><span id="L-3194"><a href="#L-3194"><span class="linenos">3194</span></a>
-</span><span id="L-3195"><a href="#L-3195"><span class="linenos">3195</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TOTALS&quot;</span><span class="p">):</span>
-</span><span id="L-3196"><a href="#L-3196"><span class="linenos">3196</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3197"><a href="#L-3197"><span class="linenos">3197</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># type: ignore</span>
-</span><span id="L-3198"><a href="#L-3198"><span class="linenos">3198</span></a>
-</span><span id="L-3199"><a href="#L-3199"><span class="linenos">3199</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">grouping_sets</span> <span class="ow">or</span> <span class="n">rollup</span> <span class="ow">or</span> <span class="n">cube</span> <span class="ow">or</span> <span class="n">totals</span><span class="p">):</span>
-</span><span id="L-3200"><a href="#L-3200"><span class="linenos">3200</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
-</span><span id="L-3201"><a href="#L-3201"><span class="linenos">3201</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-3202"><a href="#L-3202"><span class="linenos">3202</span></a> <span class="k">break</span>
-</span><span id="L-3203"><a href="#L-3203"><span class="linenos">3203</span></a>
-</span><span id="L-3204"><a href="#L-3204"><span class="linenos">3204</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">,</span> <span class="o">**</span><span class="n">elements</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="L-3205"><a href="#L-3205"><span class="linenos">3205</span></a>
-</span><span id="L-3206"><a href="#L-3206"><span class="linenos">3206</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_sets</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="L-3207"><a href="#L-3207"><span class="linenos">3207</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUPING_SETS</span><span class="p">):</span>
-</span><span id="L-3208"><a href="#L-3208"><span class="linenos">3208</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3191"><a href="#L-3191"><span class="linenos">3191</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-3192"><a href="#L-3192"><span class="linenos">3192</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">)</span>
+</span><span id="L-3193"><a href="#L-3193"><span class="linenos">3193</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLUP</span><span class="p">):</span>
+</span><span id="L-3194"><a href="#L-3194"><span class="linenos">3194</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="L-3195"><a href="#L-3195"><span class="linenos">3195</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;rollup&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">rollup</span><span class="p">))</span>
+</span><span id="L-3196"><a href="#L-3196"><span class="linenos">3196</span></a>
+</span><span id="L-3197"><a href="#L-3197"><span class="linenos">3197</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CUBE</span><span class="p">):</span>
+</span><span id="L-3198"><a href="#L-3198"><span class="linenos">3198</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="L-3199"><a href="#L-3199"><span class="linenos">3199</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;cube&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">cube</span><span class="p">))</span>
+</span><span id="L-3200"><a href="#L-3200"><span class="linenos">3200</span></a>
+</span><span id="L-3201"><a href="#L-3201"><span class="linenos">3201</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TOTALS&quot;</span><span class="p">):</span>
+</span><span id="L-3202"><a href="#L-3202"><span class="linenos">3202</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3203"><a href="#L-3203"><span class="linenos">3203</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># type: ignore</span>
+</span><span id="L-3204"><a href="#L-3204"><span class="linenos">3204</span></a>
+</span><span id="L-3205"><a href="#L-3205"><span class="linenos">3205</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">grouping_sets</span> <span class="ow">or</span> <span class="n">rollup</span> <span class="ow">or</span> <span class="n">cube</span> <span class="ow">or</span> <span class="n">totals</span><span class="p">):</span>
+</span><span id="L-3206"><a href="#L-3206"><span class="linenos">3206</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
+</span><span id="L-3207"><a href="#L-3207"><span class="linenos">3207</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3208"><a href="#L-3208"><span class="linenos">3208</span></a> <span class="k">break</span>
</span><span id="L-3209"><a href="#L-3209"><span class="linenos">3209</span></a>
-</span><span id="L-3210"><a href="#L-3210"><span class="linenos">3210</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_grouping_set</span><span class="p">)</span>
+</span><span id="L-3210"><a href="#L-3210"><span class="linenos">3210</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">,</span> <span class="o">**</span><span class="n">elements</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span><span id="L-3211"><a href="#L-3211"><span class="linenos">3211</span></a>
-</span><span id="L-3212"><a href="#L-3212"><span class="linenos">3212</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_set</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3213"><a href="#L-3213"><span class="linenos">3213</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-3214"><a href="#L-3214"><span class="linenos">3214</span></a> <span class="n">grouping_set</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="L-3215"><a href="#L-3215"><span class="linenos">3215</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-3216"><a href="#L-3216"><span class="linenos">3216</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">grouping_set</span><span class="p">)</span>
+</span><span id="L-3212"><a href="#L-3212"><span class="linenos">3212</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_sets</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-3213"><a href="#L-3213"><span class="linenos">3213</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUPING_SETS</span><span class="p">):</span>
+</span><span id="L-3214"><a href="#L-3214"><span class="linenos">3214</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3215"><a href="#L-3215"><span class="linenos">3215</span></a>
+</span><span id="L-3216"><a href="#L-3216"><span class="linenos">3216</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_grouping_set</span><span class="p">)</span>
</span><span id="L-3217"><a href="#L-3217"><span class="linenos">3217</span></a>
-</span><span id="L-3218"><a href="#L-3218"><span class="linenos">3218</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-3219"><a href="#L-3219"><span class="linenos">3219</span></a>
-</span><span id="L-3220"><a href="#L-3220"><span class="linenos">3220</span></a> <span class="k">def</span> <span class="nf">_parse_having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_having_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">]:</span>
-</span><span id="L-3221"><a href="#L-3221"><span class="linenos">3221</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_having_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">):</span>
-</span><span id="L-3222"><a href="#L-3222"><span class="linenos">3222</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3223"><a href="#L-3223"><span class="linenos">3223</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="L-3224"><a href="#L-3224"><span class="linenos">3224</span></a>
-</span><span id="L-3225"><a href="#L-3225"><span class="linenos">3225</span></a> <span class="k">def</span> <span class="nf">_parse_qualify</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">]:</span>
-</span><span id="L-3226"><a href="#L-3226"><span class="linenos">3226</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">):</span>
-</span><span id="L-3227"><a href="#L-3227"><span class="linenos">3227</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3228"><a href="#L-3228"><span class="linenos">3228</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="L-3229"><a href="#L-3229"><span class="linenos">3229</span></a>
-</span><span id="L-3230"><a href="#L-3230"><span class="linenos">3230</span></a> <span class="k">def</span> <span class="nf">_parse_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_start_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">]:</span>
-</span><span id="L-3231"><a href="#L-3231"><span class="linenos">3231</span></a> <span class="k">if</span> <span class="n">skip_start_token</span><span class="p">:</span>
-</span><span id="L-3232"><a href="#L-3232"><span class="linenos">3232</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3233"><a href="#L-3233"><span class="linenos">3233</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
-</span><span id="L-3234"><a href="#L-3234"><span class="linenos">3234</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-3235"><a href="#L-3235"><span class="linenos">3235</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3236"><a href="#L-3236"><span class="linenos">3236</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3237"><a href="#L-3237"><span class="linenos">3237</span></a>
-</span><span id="L-3238"><a href="#L-3238"><span class="linenos">3238</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">)</span>
-</span><span id="L-3239"><a href="#L-3239"><span class="linenos">3239</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">[</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3240"><a href="#L-3240"><span class="linenos">3240</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Prior</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-3241"><a href="#L-3241"><span class="linenos">3241</span></a> <span class="p">)</span>
-</span><span id="L-3242"><a href="#L-3242"><span class="linenos">3242</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-3243"><a href="#L-3243"><span class="linenos">3243</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">)</span>
-</span><span id="L-3244"><a href="#L-3244"><span class="linenos">3244</span></a>
-</span><span id="L-3245"><a href="#L-3245"><span class="linenos">3245</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
-</span><span id="L-3246"><a href="#L-3246"><span class="linenos">3246</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-3247"><a href="#L-3247"><span class="linenos">3247</span></a>
-</span><span id="L-3248"><a href="#L-3248"><span class="linenos">3248</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">connect</span><span class="o">=</span><span class="n">connect</span><span class="p">)</span>
-</span><span id="L-3249"><a href="#L-3249"><span class="linenos">3249</span></a>
-</span><span id="L-3250"><a href="#L-3250"><span class="linenos">3250</span></a> <span class="k">def</span> <span class="nf">_parse_name_as_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">:</span>
-</span><span id="L-3251"><a href="#L-3251"><span class="linenos">3251</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3252"><a href="#L-3252"><span class="linenos">3252</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span>
-</span><span id="L-3253"><a href="#L-3253"><span class="linenos">3253</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-3254"><a href="#L-3254"><span class="linenos">3254</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="L-3255"><a href="#L-3255"><span class="linenos">3255</span></a> <span class="p">)</span>
-</span><span id="L-3256"><a href="#L-3256"><span class="linenos">3256</span></a>
-</span><span id="L-3257"><a href="#L-3257"><span class="linenos">3257</span></a> <span class="k">def</span> <span class="nf">_parse_interpolate</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="L-3258"><a href="#L-3258"><span class="linenos">3258</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INTERPOLATE&quot;</span><span class="p">):</span>
-</span><span id="L-3259"><a href="#L-3259"><span class="linenos">3259</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_name_as_expression</span><span class="p">)</span>
-</span><span id="L-3260"><a href="#L-3260"><span class="linenos">3260</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3261"><a href="#L-3261"><span class="linenos">3261</span></a>
-</span><span id="L-3262"><a href="#L-3262"><span class="linenos">3262</span></a> <span class="k">def</span> <span class="nf">_parse_order</span><span class="p">(</span>
-</span><span id="L-3263"><a href="#L-3263"><span class="linenos">3263</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">skip_order_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3264"><a href="#L-3264"><span class="linenos">3264</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3265"><a href="#L-3265"><span class="linenos">3265</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3266"><a href="#L-3266"><span class="linenos">3266</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_order_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">):</span>
-</span><span id="L-3267"><a href="#L-3267"><span class="linenos">3267</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_SIBLINGS_BY</span><span class="p">):</span>
-</span><span id="L-3268"><a href="#L-3268"><span class="linenos">3268</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3269"><a href="#L-3269"><span class="linenos">3269</span></a>
-</span><span id="L-3270"><a href="#L-3270"><span class="linenos">3270</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3271"><a href="#L-3271"><span class="linenos">3271</span></a>
-</span><span id="L-3272"><a href="#L-3272"><span class="linenos">3272</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3273"><a href="#L-3273"><span class="linenos">3273</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">,</span>
-</span><span id="L-3274"><a href="#L-3274"><span class="linenos">3274</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3275"><a href="#L-3275"><span class="linenos">3275</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">),</span>
-</span><span id="L-3276"><a href="#L-3276"><span class="linenos">3276</span></a> <span class="n">interpolate</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interpolate</span><span class="p">(),</span>
-</span><span id="L-3277"><a href="#L-3277"><span class="linenos">3277</span></a> <span class="n">siblings</span><span class="o">=</span><span class="n">siblings</span><span class="p">,</span>
-</span><span id="L-3278"><a href="#L-3278"><span class="linenos">3278</span></a> <span class="p">)</span>
-</span><span id="L-3279"><a href="#L-3279"><span class="linenos">3279</span></a>
-</span><span id="L-3280"><a href="#L-3280"><span class="linenos">3280</span></a> <span class="k">def</span> <span class="nf">_parse_sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">token</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
-</span><span id="L-3281"><a href="#L-3281"><span class="linenos">3281</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
-</span><span id="L-3282"><a href="#L-3282"><span class="linenos">3282</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3283"><a href="#L-3283"><span class="linenos">3283</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp_class</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">))</span>
-</span><span id="L-3284"><a href="#L-3284"><span class="linenos">3284</span></a>
-</span><span id="L-3285"><a href="#L-3285"><span class="linenos">3285</span></a> <span class="k">def</span> <span class="nf">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">:</span>
-</span><span id="L-3286"><a href="#L-3286"><span class="linenos">3286</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span> <span class="k">if</span> <span class="n">parse_method</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-3287"><a href="#L-3287"><span class="linenos">3287</span></a>
-</span><span id="L-3288"><a href="#L-3288"><span class="linenos">3288</span></a> <span class="n">asc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">)</span>
-</span><span id="L-3289"><a href="#L-3289"><span class="linenos">3289</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3218"><a href="#L-3218"><span class="linenos">3218</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_set</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3219"><a href="#L-3219"><span class="linenos">3219</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-3220"><a href="#L-3220"><span class="linenos">3220</span></a> <span class="n">grouping_set</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="L-3221"><a href="#L-3221"><span class="linenos">3221</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-3222"><a href="#L-3222"><span class="linenos">3222</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">grouping_set</span><span class="p">)</span>
+</span><span id="L-3223"><a href="#L-3223"><span class="linenos">3223</span></a>
+</span><span id="L-3224"><a href="#L-3224"><span class="linenos">3224</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-3225"><a href="#L-3225"><span class="linenos">3225</span></a>
+</span><span id="L-3226"><a href="#L-3226"><span class="linenos">3226</span></a> <span class="k">def</span> <span class="nf">_parse_having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_having_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">]:</span>
+</span><span id="L-3227"><a href="#L-3227"><span class="linenos">3227</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_having_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">):</span>
+</span><span id="L-3228"><a href="#L-3228"><span class="linenos">3228</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3229"><a href="#L-3229"><span class="linenos">3229</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="L-3230"><a href="#L-3230"><span class="linenos">3230</span></a>
+</span><span id="L-3231"><a href="#L-3231"><span class="linenos">3231</span></a> <span class="k">def</span> <span class="nf">_parse_qualify</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">]:</span>
+</span><span id="L-3232"><a href="#L-3232"><span class="linenos">3232</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">):</span>
+</span><span id="L-3233"><a href="#L-3233"><span class="linenos">3233</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3234"><a href="#L-3234"><span class="linenos">3234</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="L-3235"><a href="#L-3235"><span class="linenos">3235</span></a>
+</span><span id="L-3236"><a href="#L-3236"><span class="linenos">3236</span></a> <span class="k">def</span> <span class="nf">_parse_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_start_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">]:</span>
+</span><span id="L-3237"><a href="#L-3237"><span class="linenos">3237</span></a> <span class="k">if</span> <span class="n">skip_start_token</span><span class="p">:</span>
+</span><span id="L-3238"><a href="#L-3238"><span class="linenos">3238</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3239"><a href="#L-3239"><span class="linenos">3239</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
+</span><span id="L-3240"><a href="#L-3240"><span class="linenos">3240</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-3241"><a href="#L-3241"><span class="linenos">3241</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3242"><a href="#L-3242"><span class="linenos">3242</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3243"><a href="#L-3243"><span class="linenos">3243</span></a>
+</span><span id="L-3244"><a href="#L-3244"><span class="linenos">3244</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">)</span>
+</span><span id="L-3245"><a href="#L-3245"><span class="linenos">3245</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">[</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3246"><a href="#L-3246"><span class="linenos">3246</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Prior</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-3247"><a href="#L-3247"><span class="linenos">3247</span></a> <span class="p">)</span>
+</span><span id="L-3248"><a href="#L-3248"><span class="linenos">3248</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-3249"><a href="#L-3249"><span class="linenos">3249</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">)</span>
+</span><span id="L-3250"><a href="#L-3250"><span class="linenos">3250</span></a>
+</span><span id="L-3251"><a href="#L-3251"><span class="linenos">3251</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
+</span><span id="L-3252"><a href="#L-3252"><span class="linenos">3252</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-3253"><a href="#L-3253"><span class="linenos">3253</span></a>
+</span><span id="L-3254"><a href="#L-3254"><span class="linenos">3254</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">connect</span><span class="o">=</span><span class="n">connect</span><span class="p">)</span>
+</span><span id="L-3255"><a href="#L-3255"><span class="linenos">3255</span></a>
+</span><span id="L-3256"><a href="#L-3256"><span class="linenos">3256</span></a> <span class="k">def</span> <span class="nf">_parse_name_as_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">:</span>
+</span><span id="L-3257"><a href="#L-3257"><span class="linenos">3257</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3258"><a href="#L-3258"><span class="linenos">3258</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span>
+</span><span id="L-3259"><a href="#L-3259"><span class="linenos">3259</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-3260"><a href="#L-3260"><span class="linenos">3260</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="L-3261"><a href="#L-3261"><span class="linenos">3261</span></a> <span class="p">)</span>
+</span><span id="L-3262"><a href="#L-3262"><span class="linenos">3262</span></a>
+</span><span id="L-3263"><a href="#L-3263"><span class="linenos">3263</span></a> <span class="k">def</span> <span class="nf">_parse_interpolate</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-3264"><a href="#L-3264"><span class="linenos">3264</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INTERPOLATE&quot;</span><span class="p">):</span>
+</span><span id="L-3265"><a href="#L-3265"><span class="linenos">3265</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_name_as_expression</span><span class="p">)</span>
+</span><span id="L-3266"><a href="#L-3266"><span class="linenos">3266</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3267"><a href="#L-3267"><span class="linenos">3267</span></a>
+</span><span id="L-3268"><a href="#L-3268"><span class="linenos">3268</span></a> <span class="k">def</span> <span class="nf">_parse_order</span><span class="p">(</span>
+</span><span id="L-3269"><a href="#L-3269"><span class="linenos">3269</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">skip_order_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3270"><a href="#L-3270"><span class="linenos">3270</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3271"><a href="#L-3271"><span class="linenos">3271</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3272"><a href="#L-3272"><span class="linenos">3272</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_order_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">):</span>
+</span><span id="L-3273"><a href="#L-3273"><span class="linenos">3273</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_SIBLINGS_BY</span><span class="p">):</span>
+</span><span id="L-3274"><a href="#L-3274"><span class="linenos">3274</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3275"><a href="#L-3275"><span class="linenos">3275</span></a>
+</span><span id="L-3276"><a href="#L-3276"><span class="linenos">3276</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3277"><a href="#L-3277"><span class="linenos">3277</span></a>
+</span><span id="L-3278"><a href="#L-3278"><span class="linenos">3278</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3279"><a href="#L-3279"><span class="linenos">3279</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">,</span>
+</span><span id="L-3280"><a href="#L-3280"><span class="linenos">3280</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3281"><a href="#L-3281"><span class="linenos">3281</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">),</span>
+</span><span id="L-3282"><a href="#L-3282"><span class="linenos">3282</span></a> <span class="n">interpolate</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interpolate</span><span class="p">(),</span>
+</span><span id="L-3283"><a href="#L-3283"><span class="linenos">3283</span></a> <span class="n">siblings</span><span class="o">=</span><span class="n">siblings</span><span class="p">,</span>
+</span><span id="L-3284"><a href="#L-3284"><span class="linenos">3284</span></a> <span class="p">)</span>
+</span><span id="L-3285"><a href="#L-3285"><span class="linenos">3285</span></a>
+</span><span id="L-3286"><a href="#L-3286"><span class="linenos">3286</span></a> <span class="k">def</span> <span class="nf">_parse_sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">token</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
+</span><span id="L-3287"><a href="#L-3287"><span class="linenos">3287</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
+</span><span id="L-3288"><a href="#L-3288"><span class="linenos">3288</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3289"><a href="#L-3289"><span class="linenos">3289</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp_class</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">))</span>
</span><span id="L-3290"><a href="#L-3290"><span class="linenos">3290</span></a>
-</span><span id="L-3291"><a href="#L-3291"><span class="linenos">3291</span></a> <span class="n">is_nulls_first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">)</span>
-</span><span id="L-3292"><a href="#L-3292"><span class="linenos">3292</span></a> <span class="n">is_nulls_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">)</span>
+</span><span id="L-3291"><a href="#L-3291"><span class="linenos">3291</span></a> <span class="k">def</span> <span class="nf">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">:</span>
+</span><span id="L-3292"><a href="#L-3292"><span class="linenos">3292</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span> <span class="k">if</span> <span class="n">parse_method</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
</span><span id="L-3293"><a href="#L-3293"><span class="linenos">3293</span></a>
-</span><span id="L-3294"><a href="#L-3294"><span class="linenos">3294</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="kc">False</span>
-</span><span id="L-3295"><a href="#L-3295"><span class="linenos">3295</span></a> <span class="n">explicitly_null_ordered</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="n">is_nulls_last</span>
+</span><span id="L-3294"><a href="#L-3294"><span class="linenos">3294</span></a> <span class="n">asc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">)</span>
+</span><span id="L-3295"><a href="#L-3295"><span class="linenos">3295</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="L-3296"><a href="#L-3296"><span class="linenos">3296</span></a>
-</span><span id="L-3297"><a href="#L-3297"><span class="linenos">3297</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-3298"><a href="#L-3298"><span class="linenos">3298</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
-</span><span id="L-3299"><a href="#L-3299"><span class="linenos">3299</span></a> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="L-3300"><a href="#L-3300"><span class="linenos">3300</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
-</span><span id="L-3301"><a href="#L-3301"><span class="linenos">3301</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
-</span><span id="L-3302"><a href="#L-3302"><span class="linenos">3302</span></a> <span class="p">)</span>
-</span><span id="L-3303"><a href="#L-3303"><span class="linenos">3303</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="L-3304"><a href="#L-3304"><span class="linenos">3304</span></a> <span class="p">):</span>
-</span><span id="L-3305"><a href="#L-3305"><span class="linenos">3305</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3306"><a href="#L-3306"><span class="linenos">3306</span></a>
-</span><span id="L-3307"><a href="#L-3307"><span class="linenos">3307</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;FILL&quot;</span><span class="p">):</span>
-</span><span id="L-3308"><a href="#L-3308"><span class="linenos">3308</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3309"><a href="#L-3309"><span class="linenos">3309</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithFill</span><span class="p">,</span>
-</span><span id="L-3310"><a href="#L-3310"><span class="linenos">3310</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
-</span><span id="L-3311"><a href="#L-3311"><span class="linenos">3311</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="L-3312"><a href="#L-3312"><span class="linenos">3312</span></a> <span class="s2">&quot;to&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="L-3313"><a href="#L-3313"><span class="linenos">3313</span></a> <span class="s2">&quot;step&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STEP&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="L-3314"><a href="#L-3314"><span class="linenos">3314</span></a> <span class="p">},</span>
-</span><span id="L-3315"><a href="#L-3315"><span class="linenos">3315</span></a> <span class="p">)</span>
-</span><span id="L-3316"><a href="#L-3316"><span class="linenos">3316</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3317"><a href="#L-3317"><span class="linenos">3317</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3318"><a href="#L-3318"><span class="linenos">3318</span></a>
-</span><span id="L-3319"><a href="#L-3319"><span class="linenos">3319</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3320"><a href="#L-3320"><span class="linenos">3320</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="n">nulls_first</span><span class="p">,</span> <span class="n">with_fill</span><span class="o">=</span><span class="n">with_fill</span>
-</span><span id="L-3321"><a href="#L-3321"><span class="linenos">3321</span></a> <span class="p">)</span>
-</span><span id="L-3322"><a href="#L-3322"><span class="linenos">3322</span></a>
-</span><span id="L-3323"><a href="#L-3323"><span class="linenos">3323</span></a> <span class="k">def</span> <span class="nf">_parse_limit</span><span class="p">(</span>
-</span><span id="L-3324"><a href="#L-3324"><span class="linenos">3324</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3325"><a href="#L-3325"><span class="linenos">3325</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3326"><a href="#L-3326"><span class="linenos">3326</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span> <span class="k">if</span> <span class="n">top</span> <span class="k">else</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">):</span>
-</span><span id="L-3327"><a href="#L-3327"><span class="linenos">3327</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="L-3328"><a href="#L-3328"><span class="linenos">3328</span></a> <span class="k">if</span> <span class="n">top</span><span class="p">:</span>
-</span><span id="L-3329"><a href="#L-3329"><span class="linenos">3329</span></a> <span class="n">limit_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
-</span><span id="L-3330"><a href="#L-3330"><span class="linenos">3330</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span> <span class="k">if</span> <span class="n">limit_paren</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="L-3331"><a href="#L-3331"><span class="linenos">3331</span></a>
-</span><span id="L-3332"><a href="#L-3332"><span class="linenos">3332</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
-</span><span id="L-3333"><a href="#L-3333"><span class="linenos">3333</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-3334"><a href="#L-3334"><span class="linenos">3334</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3335"><a href="#L-3335"><span class="linenos">3335</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="L-3336"><a href="#L-3336"><span class="linenos">3336</span></a>
-</span><span id="L-3337"><a href="#L-3337"><span class="linenos">3337</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="L-3338"><a href="#L-3338"><span class="linenos">3338</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-3339"><a href="#L-3339"><span class="linenos">3339</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3297"><a href="#L-3297"><span class="linenos">3297</span></a> <span class="n">is_nulls_first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">)</span>
+</span><span id="L-3298"><a href="#L-3298"><span class="linenos">3298</span></a> <span class="n">is_nulls_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">)</span>
+</span><span id="L-3299"><a href="#L-3299"><span class="linenos">3299</span></a>
+</span><span id="L-3300"><a href="#L-3300"><span class="linenos">3300</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="kc">False</span>
+</span><span id="L-3301"><a href="#L-3301"><span class="linenos">3301</span></a> <span class="n">explicitly_null_ordered</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="n">is_nulls_last</span>
+</span><span id="L-3302"><a href="#L-3302"><span class="linenos">3302</span></a>
+</span><span id="L-3303"><a href="#L-3303"><span class="linenos">3303</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-3304"><a href="#L-3304"><span class="linenos">3304</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
+</span><span id="L-3305"><a href="#L-3305"><span class="linenos">3305</span></a> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="L-3306"><a href="#L-3306"><span class="linenos">3306</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
+</span><span id="L-3307"><a href="#L-3307"><span class="linenos">3307</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
+</span><span id="L-3308"><a href="#L-3308"><span class="linenos">3308</span></a> <span class="p">)</span>
+</span><span id="L-3309"><a href="#L-3309"><span class="linenos">3309</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
+</span><span id="L-3310"><a href="#L-3310"><span class="linenos">3310</span></a> <span class="p">):</span>
+</span><span id="L-3311"><a href="#L-3311"><span class="linenos">3311</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3312"><a href="#L-3312"><span class="linenos">3312</span></a>
+</span><span id="L-3313"><a href="#L-3313"><span class="linenos">3313</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;FILL&quot;</span><span class="p">):</span>
+</span><span id="L-3314"><a href="#L-3314"><span class="linenos">3314</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3315"><a href="#L-3315"><span class="linenos">3315</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithFill</span><span class="p">,</span>
+</span><span id="L-3316"><a href="#L-3316"><span class="linenos">3316</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
+</span><span id="L-3317"><a href="#L-3317"><span class="linenos">3317</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="L-3318"><a href="#L-3318"><span class="linenos">3318</span></a> <span class="s2">&quot;to&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="L-3319"><a href="#L-3319"><span class="linenos">3319</span></a> <span class="s2">&quot;step&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STEP&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="L-3320"><a href="#L-3320"><span class="linenos">3320</span></a> <span class="p">},</span>
+</span><span id="L-3321"><a href="#L-3321"><span class="linenos">3321</span></a> <span class="p">)</span>
+</span><span id="L-3322"><a href="#L-3322"><span class="linenos">3322</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3323"><a href="#L-3323"><span class="linenos">3323</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3324"><a href="#L-3324"><span class="linenos">3324</span></a>
+</span><span id="L-3325"><a href="#L-3325"><span class="linenos">3325</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3326"><a href="#L-3326"><span class="linenos">3326</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="n">nulls_first</span><span class="p">,</span> <span class="n">with_fill</span><span class="o">=</span><span class="n">with_fill</span>
+</span><span id="L-3327"><a href="#L-3327"><span class="linenos">3327</span></a> <span class="p">)</span>
+</span><span id="L-3328"><a href="#L-3328"><span class="linenos">3328</span></a>
+</span><span id="L-3329"><a href="#L-3329"><span class="linenos">3329</span></a> <span class="k">def</span> <span class="nf">_parse_limit</span><span class="p">(</span>
+</span><span id="L-3330"><a href="#L-3330"><span class="linenos">3330</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3331"><a href="#L-3331"><span class="linenos">3331</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3332"><a href="#L-3332"><span class="linenos">3332</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span> <span class="k">if</span> <span class="n">top</span> <span class="k">else</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">):</span>
+</span><span id="L-3333"><a href="#L-3333"><span class="linenos">3333</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
+</span><span id="L-3334"><a href="#L-3334"><span class="linenos">3334</span></a> <span class="k">if</span> <span class="n">top</span><span class="p">:</span>
+</span><span id="L-3335"><a href="#L-3335"><span class="linenos">3335</span></a> <span class="n">limit_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
+</span><span id="L-3336"><a href="#L-3336"><span class="linenos">3336</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span> <span class="k">if</span> <span class="n">limit_paren</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="L-3337"><a href="#L-3337"><span class="linenos">3337</span></a>
+</span><span id="L-3338"><a href="#L-3338"><span class="linenos">3338</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
+</span><span id="L-3339"><a href="#L-3339"><span class="linenos">3339</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-3340"><a href="#L-3340"><span class="linenos">3340</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3341"><a href="#L-3341"><span class="linenos">3341</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3341"><a href="#L-3341"><span class="linenos">3341</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="L-3342"><a href="#L-3342"><span class="linenos">3342</span></a>
-</span><span id="L-3343"><a href="#L-3343"><span class="linenos">3343</span></a> <span class="n">limit_exp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3344"><a href="#L-3344"><span class="linenos">3344</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span>
-</span><span id="L-3345"><a href="#L-3345"><span class="linenos">3345</span></a> <span class="p">)</span>
-</span><span id="L-3346"><a href="#L-3346"><span class="linenos">3346</span></a>
-</span><span id="L-3347"><a href="#L-3347"><span class="linenos">3347</span></a> <span class="k">return</span> <span class="n">limit_exp</span>
+</span><span id="L-3343"><a href="#L-3343"><span class="linenos">3343</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="L-3344"><a href="#L-3344"><span class="linenos">3344</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-3345"><a href="#L-3345"><span class="linenos">3345</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3346"><a href="#L-3346"><span class="linenos">3346</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3347"><a href="#L-3347"><span class="linenos">3347</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3348"><a href="#L-3348"><span class="linenos">3348</span></a>
-</span><span id="L-3349"><a href="#L-3349"><span class="linenos">3349</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">):</span>
-</span><span id="L-3350"><a href="#L-3350"><span class="linenos">3350</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">))</span>
-</span><span id="L-3351"><a href="#L-3351"><span class="linenos">3351</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;FIRST&quot;</span>
-</span><span id="L-3352"><a href="#L-3352"><span class="linenos">3352</span></a>
-</span><span id="L-3353"><a href="#L-3353"><span class="linenos">3353</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">FETCH_TOKENS</span><span class="p">)</span>
-</span><span id="L-3354"><a href="#L-3354"><span class="linenos">3354</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">)</span>
-</span><span id="L-3355"><a href="#L-3355"><span class="linenos">3355</span></a>
-</span><span id="L-3356"><a href="#L-3356"><span class="linenos">3356</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
+</span><span id="L-3349"><a href="#L-3349"><span class="linenos">3349</span></a> <span class="n">limit_exp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3350"><a href="#L-3350"><span class="linenos">3350</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span>
+</span><span id="L-3351"><a href="#L-3351"><span class="linenos">3351</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3352"><a href="#L-3352"><span class="linenos">3352</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-3353"><a href="#L-3353"><span class="linenos">3353</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
+</span><span id="L-3354"><a href="#L-3354"><span class="linenos">3354</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="L-3355"><a href="#L-3355"><span class="linenos">3355</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_by</span><span class="p">(),</span>
+</span><span id="L-3356"><a href="#L-3356"><span class="linenos">3356</span></a> <span class="p">)</span>
</span><span id="L-3357"><a href="#L-3357"><span class="linenos">3357</span></a>
-</span><span id="L-3358"><a href="#L-3358"><span class="linenos">3358</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
-</span><span id="L-3359"><a href="#L-3359"><span class="linenos">3359</span></a> <span class="n">with_ties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIES&quot;</span><span class="p">)</span>
-</span><span id="L-3360"><a href="#L-3360"><span class="linenos">3360</span></a>
-</span><span id="L-3361"><a href="#L-3361"><span class="linenos">3361</span></a> <span class="k">if</span> <span class="n">only</span> <span class="ow">and</span> <span class="n">with_ties</span><span class="p">:</span>
-</span><span id="L-3362"><a href="#L-3362"><span class="linenos">3362</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Cannot specify both ONLY and WITH TIES in FETCH clause&quot;</span><span class="p">)</span>
+</span><span id="L-3358"><a href="#L-3358"><span class="linenos">3358</span></a> <span class="k">return</span> <span class="n">limit_exp</span>
+</span><span id="L-3359"><a href="#L-3359"><span class="linenos">3359</span></a>
+</span><span id="L-3360"><a href="#L-3360"><span class="linenos">3360</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">):</span>
+</span><span id="L-3361"><a href="#L-3361"><span class="linenos">3361</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">))</span>
+</span><span id="L-3362"><a href="#L-3362"><span class="linenos">3362</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;FIRST&quot;</span>
</span><span id="L-3363"><a href="#L-3363"><span class="linenos">3363</span></a>
-</span><span id="L-3364"><a href="#L-3364"><span class="linenos">3364</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3365"><a href="#L-3365"><span class="linenos">3365</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
-</span><span id="L-3366"><a href="#L-3366"><span class="linenos">3366</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
-</span><span id="L-3367"><a href="#L-3367"><span class="linenos">3367</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
-</span><span id="L-3368"><a href="#L-3368"><span class="linenos">3368</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="L-3369"><a href="#L-3369"><span class="linenos">3369</span></a> <span class="n">with_ties</span><span class="o">=</span><span class="n">with_ties</span><span class="p">,</span>
-</span><span id="L-3370"><a href="#L-3370"><span class="linenos">3370</span></a> <span class="p">)</span>
+</span><span id="L-3364"><a href="#L-3364"><span class="linenos">3364</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">FETCH_TOKENS</span><span class="p">)</span>
+</span><span id="L-3365"><a href="#L-3365"><span class="linenos">3365</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">)</span>
+</span><span id="L-3366"><a href="#L-3366"><span class="linenos">3366</span></a>
+</span><span id="L-3367"><a href="#L-3367"><span class="linenos">3367</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
+</span><span id="L-3368"><a href="#L-3368"><span class="linenos">3368</span></a>
+</span><span id="L-3369"><a href="#L-3369"><span class="linenos">3369</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
+</span><span id="L-3370"><a href="#L-3370"><span class="linenos">3370</span></a> <span class="n">with_ties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIES&quot;</span><span class="p">)</span>
</span><span id="L-3371"><a href="#L-3371"><span class="linenos">3371</span></a>
-</span><span id="L-3372"><a href="#L-3372"><span class="linenos">3372</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3373"><a href="#L-3373"><span class="linenos">3373</span></a>
-</span><span id="L-3374"><a href="#L-3374"><span class="linenos">3374</span></a> <span class="k">def</span> <span class="nf">_parse_offset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3375"><a href="#L-3375"><span class="linenos">3375</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
-</span><span id="L-3376"><a href="#L-3376"><span class="linenos">3376</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3377"><a href="#L-3377"><span class="linenos">3377</span></a>
-</span><span id="L-3378"><a href="#L-3378"><span class="linenos">3378</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="L-3379"><a href="#L-3379"><span class="linenos">3379</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
-</span><span id="L-3380"><a href="#L-3380"><span class="linenos">3380</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">count</span><span class="p">)</span>
-</span><span id="L-3381"><a href="#L-3381"><span class="linenos">3381</span></a>
-</span><span id="L-3382"><a href="#L-3382"><span class="linenos">3382</span></a> <span class="k">def</span> <span class="nf">_parse_locks</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">]:</span>
-</span><span id="L-3383"><a href="#L-3383"><span class="linenos">3383</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-3384"><a href="#L-3384"><span class="linenos">3384</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-3385"><a href="#L-3385"><span class="linenos">3385</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">):</span>
-</span><span id="L-3386"><a href="#L-3386"><span class="linenos">3386</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3387"><a href="#L-3387"><span class="linenos">3387</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
-</span><span id="L-3388"><a href="#L-3388"><span class="linenos">3388</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
-</span><span id="L-3389"><a href="#L-3389"><span class="linenos">3389</span></a> <span class="p">):</span>
-</span><span id="L-3390"><a href="#L-3390"><span class="linenos">3390</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3391"><a href="#L-3391"><span class="linenos">3391</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3392"><a href="#L-3392"><span class="linenos">3392</span></a> <span class="k">break</span>
-</span><span id="L-3393"><a href="#L-3393"><span class="linenos">3393</span></a>
-</span><span id="L-3394"><a href="#L-3394"><span class="linenos">3394</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3395"><a href="#L-3395"><span class="linenos">3395</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OF&quot;</span><span class="p">):</span>
-</span><span id="L-3396"><a href="#L-3396"><span class="linenos">3396</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-3397"><a href="#L-3397"><span class="linenos">3397</span></a>
-</span><span id="L-3398"><a href="#L-3398"><span class="linenos">3398</span></a> <span class="n">wait</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3399"><a href="#L-3399"><span class="linenos">3399</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOWAIT&quot;</span><span class="p">):</span>
-</span><span id="L-3400"><a href="#L-3400"><span class="linenos">3400</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3401"><a href="#L-3401"><span class="linenos">3401</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WAIT&quot;</span><span class="p">):</span>
-</span><span id="L-3402"><a href="#L-3402"><span class="linenos">3402</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-3403"><a href="#L-3403"><span class="linenos">3403</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SKIP&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCKED&quot;</span><span class="p">):</span>
-</span><span id="L-3404"><a href="#L-3404"><span class="linenos">3404</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3405"><a href="#L-3405"><span class="linenos">3405</span></a>
-</span><span id="L-3406"><a href="#L-3406"><span class="linenos">3406</span></a> <span class="n">locks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-3407"><a href="#L-3407"><span class="linenos">3407</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait</span><span class="p">)</span>
-</span><span id="L-3408"><a href="#L-3408"><span class="linenos">3408</span></a> <span class="p">)</span>
-</span><span id="L-3409"><a href="#L-3409"><span class="linenos">3409</span></a>
-</span><span id="L-3410"><a href="#L-3410"><span class="linenos">3410</span></a> <span class="k">return</span> <span class="n">locks</span>
-</span><span id="L-3411"><a href="#L-3411"><span class="linenos">3411</span></a>
-</span><span id="L-3412"><a href="#L-3412"><span class="linenos">3412</span></a> <span class="k">def</span> <span class="nf">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3413"><a href="#L-3413"><span class="linenos">3413</span></a> <span class="k">while</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_OPERATIONS</span><span class="p">):</span>
-</span><span id="L-3414"><a href="#L-3414"><span class="linenos">3414</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
-</span><span id="L-3415"><a href="#L-3415"><span class="linenos">3415</span></a>
-</span><span id="L-3416"><a href="#L-3416"><span class="linenos">3416</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">:</span>
-</span><span id="L-3417"><a href="#L-3417"><span class="linenos">3417</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span>
-</span><span id="L-3418"><a href="#L-3418"><span class="linenos">3418</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">:</span>
-</span><span id="L-3419"><a href="#L-3419"><span class="linenos">3419</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span>
-</span><span id="L-3420"><a href="#L-3420"><span class="linenos">3420</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3421"><a href="#L-3421"><span class="linenos">3421</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span>
+</span><span id="L-3372"><a href="#L-3372"><span class="linenos">3372</span></a> <span class="k">if</span> <span class="n">only</span> <span class="ow">and</span> <span class="n">with_ties</span><span class="p">:</span>
+</span><span id="L-3373"><a href="#L-3373"><span class="linenos">3373</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Cannot specify both ONLY and WITH TIES in FETCH clause&quot;</span><span class="p">)</span>
+</span><span id="L-3374"><a href="#L-3374"><span class="linenos">3374</span></a>
+</span><span id="L-3375"><a href="#L-3375"><span class="linenos">3375</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3376"><a href="#L-3376"><span class="linenos">3376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
+</span><span id="L-3377"><a href="#L-3377"><span class="linenos">3377</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
+</span><span id="L-3378"><a href="#L-3378"><span class="linenos">3378</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
+</span><span id="L-3379"><a href="#L-3379"><span class="linenos">3379</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="L-3380"><a href="#L-3380"><span class="linenos">3380</span></a> <span class="n">with_ties</span><span class="o">=</span><span class="n">with_ties</span><span class="p">,</span>
+</span><span id="L-3381"><a href="#L-3381"><span class="linenos">3381</span></a> <span class="p">)</span>
+</span><span id="L-3382"><a href="#L-3382"><span class="linenos">3382</span></a>
+</span><span id="L-3383"><a href="#L-3383"><span class="linenos">3383</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3384"><a href="#L-3384"><span class="linenos">3384</span></a>
+</span><span id="L-3385"><a href="#L-3385"><span class="linenos">3385</span></a> <span class="k">def</span> <span class="nf">_parse_offset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3386"><a href="#L-3386"><span class="linenos">3386</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
+</span><span id="L-3387"><a href="#L-3387"><span class="linenos">3387</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3388"><a href="#L-3388"><span class="linenos">3388</span></a>
+</span><span id="L-3389"><a href="#L-3389"><span class="linenos">3389</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3390"><a href="#L-3390"><span class="linenos">3390</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
+</span><span id="L-3391"><a href="#L-3391"><span class="linenos">3391</span></a>
+</span><span id="L-3392"><a href="#L-3392"><span class="linenos">3392</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3393"><a href="#L-3393"><span class="linenos">3393</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">count</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_by</span><span class="p">()</span>
+</span><span id="L-3394"><a href="#L-3394"><span class="linenos">3394</span></a> <span class="p">)</span>
+</span><span id="L-3395"><a href="#L-3395"><span class="linenos">3395</span></a>
+</span><span id="L-3396"><a href="#L-3396"><span class="linenos">3396</span></a> <span class="k">def</span> <span class="nf">_parse_limit_by</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-3397"><a href="#L-3397"><span class="linenos">3397</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="L-3398"><a href="#L-3398"><span class="linenos">3398</span></a>
+</span><span id="L-3399"><a href="#L-3399"><span class="linenos">3399</span></a> <span class="k">def</span> <span class="nf">_parse_locks</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">]:</span>
+</span><span id="L-3400"><a href="#L-3400"><span class="linenos">3400</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-3401"><a href="#L-3401"><span class="linenos">3401</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-3402"><a href="#L-3402"><span class="linenos">3402</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">):</span>
+</span><span id="L-3403"><a href="#L-3403"><span class="linenos">3403</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3404"><a href="#L-3404"><span class="linenos">3404</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
+</span><span id="L-3405"><a href="#L-3405"><span class="linenos">3405</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
+</span><span id="L-3406"><a href="#L-3406"><span class="linenos">3406</span></a> <span class="p">):</span>
+</span><span id="L-3407"><a href="#L-3407"><span class="linenos">3407</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3408"><a href="#L-3408"><span class="linenos">3408</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3409"><a href="#L-3409"><span class="linenos">3409</span></a> <span class="k">break</span>
+</span><span id="L-3410"><a href="#L-3410"><span class="linenos">3410</span></a>
+</span><span id="L-3411"><a href="#L-3411"><span class="linenos">3411</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3412"><a href="#L-3412"><span class="linenos">3412</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OF&quot;</span><span class="p">):</span>
+</span><span id="L-3413"><a href="#L-3413"><span class="linenos">3413</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-3414"><a href="#L-3414"><span class="linenos">3414</span></a>
+</span><span id="L-3415"><a href="#L-3415"><span class="linenos">3415</span></a> <span class="n">wait</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3416"><a href="#L-3416"><span class="linenos">3416</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOWAIT&quot;</span><span class="p">):</span>
+</span><span id="L-3417"><a href="#L-3417"><span class="linenos">3417</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3418"><a href="#L-3418"><span class="linenos">3418</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WAIT&quot;</span><span class="p">):</span>
+</span><span id="L-3419"><a href="#L-3419"><span class="linenos">3419</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-3420"><a href="#L-3420"><span class="linenos">3420</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SKIP&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCKED&quot;</span><span class="p">):</span>
+</span><span id="L-3421"><a href="#L-3421"><span class="linenos">3421</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-3422"><a href="#L-3422"><span class="linenos">3422</span></a>
-</span><span id="L-3423"><a href="#L-3423"><span class="linenos">3423</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="L-3424"><a href="#L-3424"><span class="linenos">3424</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">)</span>
-</span><span id="L-3425"><a href="#L-3425"><span class="linenos">3425</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">)</span>
-</span><span id="L-3426"><a href="#L-3426"><span class="linenos">3426</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_set_operation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-3427"><a href="#L-3427"><span class="linenos">3427</span></a>
-</span><span id="L-3428"><a href="#L-3428"><span class="linenos">3428</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3429"><a href="#L-3429"><span class="linenos">3429</span></a> <span class="n">operation</span><span class="p">,</span>
-</span><span id="L-3430"><a href="#L-3430"><span class="linenos">3430</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="L-3431"><a href="#L-3431"><span class="linenos">3431</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3432"><a href="#L-3432"><span class="linenos">3432</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
-</span><span id="L-3433"><a href="#L-3433"><span class="linenos">3433</span></a> <span class="n">by_name</span><span class="o">=</span><span class="n">by_name</span><span class="p">,</span>
-</span><span id="L-3434"><a href="#L-3434"><span class="linenos">3434</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-3435"><a href="#L-3435"><span class="linenos">3435</span></a> <span class="p">)</span>
-</span><span id="L-3436"><a href="#L-3436"><span class="linenos">3436</span></a>
-</span><span id="L-3437"><a href="#L-3437"><span class="linenos">3437</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">Union</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">MODIFIERS_ATTACHED_TO_UNION</span><span class="p">:</span>
-</span><span id="L-3438"><a href="#L-3438"><span class="linenos">3438</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="L-3423"><a href="#L-3423"><span class="linenos">3423</span></a> <span class="n">locks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-3424"><a href="#L-3424"><span class="linenos">3424</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait</span><span class="p">)</span>
+</span><span id="L-3425"><a href="#L-3425"><span class="linenos">3425</span></a> <span class="p">)</span>
+</span><span id="L-3426"><a href="#L-3426"><span class="linenos">3426</span></a>
+</span><span id="L-3427"><a href="#L-3427"><span class="linenos">3427</span></a> <span class="k">return</span> <span class="n">locks</span>
+</span><span id="L-3428"><a href="#L-3428"><span class="linenos">3428</span></a>
+</span><span id="L-3429"><a href="#L-3429"><span class="linenos">3429</span></a> <span class="k">def</span> <span class="nf">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3430"><a href="#L-3430"><span class="linenos">3430</span></a> <span class="k">while</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_OPERATIONS</span><span class="p">):</span>
+</span><span id="L-3431"><a href="#L-3431"><span class="linenos">3431</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="L-3432"><a href="#L-3432"><span class="linenos">3432</span></a>
+</span><span id="L-3433"><a href="#L-3433"><span class="linenos">3433</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">:</span>
+</span><span id="L-3434"><a href="#L-3434"><span class="linenos">3434</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span>
+</span><span id="L-3435"><a href="#L-3435"><span class="linenos">3435</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">:</span>
+</span><span id="L-3436"><a href="#L-3436"><span class="linenos">3436</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span>
+</span><span id="L-3437"><a href="#L-3437"><span class="linenos">3437</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3438"><a href="#L-3438"><span class="linenos">3438</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span>
</span><span id="L-3439"><a href="#L-3439"><span class="linenos">3439</span></a>
-</span><span id="L-3440"><a href="#L-3440"><span class="linenos">3440</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-3441"><a href="#L-3441"><span class="linenos">3441</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNION_MODIFIERS</span><span class="p">:</span>
-</span><span id="L-3442"><a href="#L-3442"><span class="linenos">3442</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
-</span><span id="L-3443"><a href="#L-3443"><span class="linenos">3443</span></a> <span class="k">if</span> <span class="n">expr</span><span class="p">:</span>
-</span><span id="L-3444"><a href="#L-3444"><span class="linenos">3444</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
-</span><span id="L-3445"><a href="#L-3445"><span class="linenos">3445</span></a>
-</span><span id="L-3446"><a href="#L-3446"><span class="linenos">3446</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3447"><a href="#L-3447"><span class="linenos">3447</span></a>
-</span><span id="L-3448"><a href="#L-3448"><span class="linenos">3448</span></a> <span class="k">def</span> <span class="nf">_parse_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3449"><a href="#L-3449"><span class="linenos">3449</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="L-3450"><a href="#L-3450"><span class="linenos">3450</span></a>
-</span><span id="L-3451"><a href="#L-3451"><span class="linenos">3451</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3452"><a href="#L-3452"><span class="linenos">3452</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONJUNCTION</span><span class="p">)</span>
+</span><span id="L-3440"><a href="#L-3440"><span class="linenos">3440</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="L-3441"><a href="#L-3441"><span class="linenos">3441</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">)</span>
+</span><span id="L-3442"><a href="#L-3442"><span class="linenos">3442</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">)</span>
+</span><span id="L-3443"><a href="#L-3443"><span class="linenos">3443</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_set_operation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3444"><a href="#L-3444"><span class="linenos">3444</span></a>
+</span><span id="L-3445"><a href="#L-3445"><span class="linenos">3445</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3446"><a href="#L-3446"><span class="linenos">3446</span></a> <span class="n">operation</span><span class="p">,</span>
+</span><span id="L-3447"><a href="#L-3447"><span class="linenos">3447</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="L-3448"><a href="#L-3448"><span class="linenos">3448</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3449"><a href="#L-3449"><span class="linenos">3449</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
+</span><span id="L-3450"><a href="#L-3450"><span class="linenos">3450</span></a> <span class="n">by_name</span><span class="o">=</span><span class="n">by_name</span><span class="p">,</span>
+</span><span id="L-3451"><a href="#L-3451"><span class="linenos">3451</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-3452"><a href="#L-3452"><span class="linenos">3452</span></a> <span class="p">)</span>
</span><span id="L-3453"><a href="#L-3453"><span class="linenos">3453</span></a>
-</span><span id="L-3454"><a href="#L-3454"><span class="linenos">3454</span></a> <span class="k">def</span> <span class="nf">_parse_equality</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3455"><a href="#L-3455"><span class="linenos">3455</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_comparison</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EQUALITY</span><span class="p">)</span>
+</span><span id="L-3454"><a href="#L-3454"><span class="linenos">3454</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">Union</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">MODIFIERS_ATTACHED_TO_UNION</span><span class="p">:</span>
+</span><span id="L-3455"><a href="#L-3455"><span class="linenos">3455</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">expression</span>
</span><span id="L-3456"><a href="#L-3456"><span class="linenos">3456</span></a>
-</span><span id="L-3457"><a href="#L-3457"><span class="linenos">3457</span></a> <span class="k">def</span> <span class="nf">_parse_comparison</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3458"><a href="#L-3458"><span class="linenos">3458</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_range</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPARISON</span><span class="p">)</span>
-</span><span id="L-3459"><a href="#L-3459"><span class="linenos">3459</span></a>
-</span><span id="L-3460"><a href="#L-3460"><span class="linenos">3460</span></a> <span class="k">def</span> <span class="nf">_parse_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3461"><a href="#L-3461"><span class="linenos">3461</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-3462"><a href="#L-3462"><span class="linenos">3462</span></a> <span class="n">negate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
-</span><span id="L-3463"><a href="#L-3463"><span class="linenos">3463</span></a>
-</span><span id="L-3464"><a href="#L-3464"><span class="linenos">3464</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">):</span>
-</span><span id="L-3465"><a href="#L-3465"><span class="linenos">3465</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="L-3466"><a href="#L-3466"><span class="linenos">3466</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-3467"><a href="#L-3467"><span class="linenos">3467</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3468"><a href="#L-3468"><span class="linenos">3468</span></a>
-</span><span id="L-3469"><a href="#L-3469"><span class="linenos">3469</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="L-3470"><a href="#L-3470"><span class="linenos">3470</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">):</span>
-</span><span id="L-3471"><a href="#L-3471"><span class="linenos">3471</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
-</span><span id="L-3472"><a href="#L-3472"><span class="linenos">3472</span></a>
-</span><span id="L-3473"><a href="#L-3473"><span class="linenos">3473</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
-</span><span id="L-3474"><a href="#L-3474"><span class="linenos">3474</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
-</span><span id="L-3475"><a href="#L-3475"><span class="linenos">3475</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOTNULL</span><span class="p">):</span>
-</span><span id="L-3476"><a href="#L-3476"><span class="linenos">3476</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
-</span><span id="L-3477"><a href="#L-3477"><span class="linenos">3477</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3478"><a href="#L-3478"><span class="linenos">3478</span></a>
-</span><span id="L-3479"><a href="#L-3479"><span class="linenos">3479</span></a> <span class="k">if</span> <span class="n">negate</span><span class="p">:</span>
-</span><span id="L-3480"><a href="#L-3480"><span class="linenos">3480</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3481"><a href="#L-3481"><span class="linenos">3481</span></a>
-</span><span id="L-3482"><a href="#L-3482"><span class="linenos">3482</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">):</span>
-</span><span id="L-3483"><a href="#L-3483"><span class="linenos">3483</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_is</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3484"><a href="#L-3484"><span class="linenos">3484</span></a>
-</span><span id="L-3485"><a href="#L-3485"><span class="linenos">3485</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3486"><a href="#L-3486"><span class="linenos">3486</span></a>
-</span><span id="L-3487"><a href="#L-3487"><span class="linenos">3487</span></a> <span class="k">def</span> <span class="nf">_parse_is</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3488"><a href="#L-3488"><span class="linenos">3488</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="L-3489"><a href="#L-3489"><span class="linenos">3489</span></a> <span class="n">negate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
-</span><span id="L-3490"><a href="#L-3490"><span class="linenos">3490</span></a>
-</span><span id="L-3491"><a href="#L-3491"><span class="linenos">3491</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">):</span>
-</span><span id="L-3492"><a href="#L-3492"><span class="linenos">3492</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span> <span class="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeNEQ</span>
-</span><span id="L-3493"><a href="#L-3493"><span class="linenos">3493</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">klass</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="L-3494"><a href="#L-3494"><span class="linenos">3494</span></a>
-</span><span id="L-3495"><a href="#L-3495"><span class="linenos">3495</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_null</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_boolean</span><span class="p">()</span>
-</span><span id="L-3496"><a href="#L-3496"><span class="linenos">3496</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-3497"><a href="#L-3497"><span class="linenos">3497</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-3498"><a href="#L-3498"><span class="linenos">3498</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3499"><a href="#L-3499"><span class="linenos">3499</span></a>
-</span><span id="L-3500"><a href="#L-3500"><span class="linenos">3500</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-3501"><a href="#L-3501"><span class="linenos">3501</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">this</span>
-</span><span id="L-3502"><a href="#L-3502"><span class="linenos">3502</span></a>
-</span><span id="L-3503"><a href="#L-3503"><span class="linenos">3503</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
-</span><span id="L-3504"><a href="#L-3504"><span class="linenos">3504</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">(</span><span class="n">with_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-3505"><a href="#L-3505"><span class="linenos">3505</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="L-3506"><a href="#L-3506"><span class="linenos">3506</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unnest</span><span class="o">=</span><span class="n">unnest</span><span class="p">)</span>
-</span><span id="L-3507"><a href="#L-3507"><span class="linenos">3507</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">)):</span>
-</span><span id="L-3508"><a href="#L-3508"><span class="linenos">3508</span></a> <span class="n">matched_l_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span>
-</span><span id="L-3509"><a href="#L-3509"><span class="linenos">3509</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
-</span><span id="L-3510"><a href="#L-3510"><span class="linenos">3510</span></a>
-</span><span id="L-3511"><a href="#L-3511"><span class="linenos">3511</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
-</span><span id="L-3512"><a href="#L-3512"><span class="linenos">3512</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">query</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-</span><span id="L-3513"><a href="#L-3513"><span class="linenos">3513</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3514"><a href="#L-3514"><span class="linenos">3514</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-3515"><a href="#L-3515"><span class="linenos">3515</span></a>
-</span><span id="L-3516"><a href="#L-3516"><span class="linenos">3516</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
-</span><span id="L-3517"><a href="#L-3517"><span class="linenos">3517</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3518"><a href="#L-3518"><span class="linenos">3518</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">):</span>
-</span><span id="L-3519"><a href="#L-3519"><span class="linenos">3519</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting ]&quot;</span><span class="p">)</span>
-</span><span id="L-3520"><a href="#L-3520"><span class="linenos">3520</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3521"><a href="#L-3521"><span class="linenos">3521</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">field</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
-</span><span id="L-3522"><a href="#L-3522"><span class="linenos">3522</span></a>
-</span><span id="L-3523"><a href="#L-3523"><span class="linenos">3523</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3524"><a href="#L-3524"><span class="linenos">3524</span></a>
-</span><span id="L-3525"><a href="#L-3525"><span class="linenos">3525</span></a> <span class="k">def</span> <span class="nf">_parse_between</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">:</span>
-</span><span id="L-3526"><a href="#L-3526"><span class="linenos">3526</span></a> <span class="n">low</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-3527"><a href="#L-3527"><span class="linenos">3527</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span>
-</span><span id="L-3528"><a href="#L-3528"><span class="linenos">3528</span></a> <span class="n">high</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-3529"><a href="#L-3529"><span class="linenos">3529</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">low</span><span class="o">=</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="o">=</span><span class="n">high</span><span class="p">)</span>
-</span><span id="L-3530"><a href="#L-3530"><span class="linenos">3530</span></a>
-</span><span id="L-3531"><a href="#L-3531"><span class="linenos">3531</span></a> <span class="k">def</span> <span class="nf">_parse_escape</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3532"><a href="#L-3532"><span class="linenos">3532</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">):</span>
-</span><span id="L-3533"><a href="#L-3533"><span class="linenos">3533</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3534"><a href="#L-3534"><span class="linenos">3534</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Escape</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="L-3535"><a href="#L-3535"><span class="linenos">3535</span></a>
-</span><span id="L-3536"><a href="#L-3536"><span class="linenos">3536</span></a> <span class="k">def</span> <span class="nf">_parse_interval</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">]:</span>
-</span><span id="L-3537"><a href="#L-3537"><span class="linenos">3537</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3538"><a href="#L-3538"><span class="linenos">3538</span></a>
-</span><span id="L-3539"><a href="#L-3539"><span class="linenos">3539</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">)</span> <span class="ow">and</span> <span class="n">match_interval</span><span class="p">:</span>
-</span><span id="L-3540"><a href="#L-3540"><span class="linenos">3540</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3457"><a href="#L-3457"><span class="linenos">3457</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-3458"><a href="#L-3458"><span class="linenos">3458</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNION_MODIFIERS</span><span class="p">:</span>
+</span><span id="L-3459"><a href="#L-3459"><span class="linenos">3459</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="L-3460"><a href="#L-3460"><span class="linenos">3460</span></a> <span class="k">if</span> <span class="n">expr</span><span class="p">:</span>
+</span><span id="L-3461"><a href="#L-3461"><span class="linenos">3461</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
+</span><span id="L-3462"><a href="#L-3462"><span class="linenos">3462</span></a>
+</span><span id="L-3463"><a href="#L-3463"><span class="linenos">3463</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3464"><a href="#L-3464"><span class="linenos">3464</span></a>
+</span><span id="L-3465"><a href="#L-3465"><span class="linenos">3465</span></a> <span class="k">def</span> <span class="nf">_parse_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3466"><a href="#L-3466"><span class="linenos">3466</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="L-3467"><a href="#L-3467"><span class="linenos">3467</span></a>
+</span><span id="L-3468"><a href="#L-3468"><span class="linenos">3468</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3469"><a href="#L-3469"><span class="linenos">3469</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONJUNCTION</span><span class="p">)</span>
+</span><span id="L-3470"><a href="#L-3470"><span class="linenos">3470</span></a>
+</span><span id="L-3471"><a href="#L-3471"><span class="linenos">3471</span></a> <span class="k">def</span> <span class="nf">_parse_equality</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3472"><a href="#L-3472"><span class="linenos">3472</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_comparison</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EQUALITY</span><span class="p">)</span>
+</span><span id="L-3473"><a href="#L-3473"><span class="linenos">3473</span></a>
+</span><span id="L-3474"><a href="#L-3474"><span class="linenos">3474</span></a> <span class="k">def</span> <span class="nf">_parse_comparison</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3475"><a href="#L-3475"><span class="linenos">3475</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_range</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPARISON</span><span class="p">)</span>
+</span><span id="L-3476"><a href="#L-3476"><span class="linenos">3476</span></a>
+</span><span id="L-3477"><a href="#L-3477"><span class="linenos">3477</span></a> <span class="k">def</span> <span class="nf">_parse_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3478"><a href="#L-3478"><span class="linenos">3478</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-3479"><a href="#L-3479"><span class="linenos">3479</span></a> <span class="n">negate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
+</span><span id="L-3480"><a href="#L-3480"><span class="linenos">3480</span></a>
+</span><span id="L-3481"><a href="#L-3481"><span class="linenos">3481</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">):</span>
+</span><span id="L-3482"><a href="#L-3482"><span class="linenos">3482</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="L-3483"><a href="#L-3483"><span class="linenos">3483</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-3484"><a href="#L-3484"><span class="linenos">3484</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3485"><a href="#L-3485"><span class="linenos">3485</span></a>
+</span><span id="L-3486"><a href="#L-3486"><span class="linenos">3486</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="L-3487"><a href="#L-3487"><span class="linenos">3487</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">):</span>
+</span><span id="L-3488"><a href="#L-3488"><span class="linenos">3488</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
+</span><span id="L-3489"><a href="#L-3489"><span class="linenos">3489</span></a>
+</span><span id="L-3490"><a href="#L-3490"><span class="linenos">3490</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
+</span><span id="L-3491"><a href="#L-3491"><span class="linenos">3491</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
+</span><span id="L-3492"><a href="#L-3492"><span class="linenos">3492</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOTNULL</span><span class="p">):</span>
+</span><span id="L-3493"><a href="#L-3493"><span class="linenos">3493</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
+</span><span id="L-3494"><a href="#L-3494"><span class="linenos">3494</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3495"><a href="#L-3495"><span class="linenos">3495</span></a>
+</span><span id="L-3496"><a href="#L-3496"><span class="linenos">3496</span></a> <span class="k">if</span> <span class="n">negate</span><span class="p">:</span>
+</span><span id="L-3497"><a href="#L-3497"><span class="linenos">3497</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3498"><a href="#L-3498"><span class="linenos">3498</span></a>
+</span><span id="L-3499"><a href="#L-3499"><span class="linenos">3499</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">):</span>
+</span><span id="L-3500"><a href="#L-3500"><span class="linenos">3500</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_is</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3501"><a href="#L-3501"><span class="linenos">3501</span></a>
+</span><span id="L-3502"><a href="#L-3502"><span class="linenos">3502</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3503"><a href="#L-3503"><span class="linenos">3503</span></a>
+</span><span id="L-3504"><a href="#L-3504"><span class="linenos">3504</span></a> <span class="k">def</span> <span class="nf">_parse_is</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3505"><a href="#L-3505"><span class="linenos">3505</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="L-3506"><a href="#L-3506"><span class="linenos">3506</span></a> <span class="n">negate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
+</span><span id="L-3507"><a href="#L-3507"><span class="linenos">3507</span></a>
+</span><span id="L-3508"><a href="#L-3508"><span class="linenos">3508</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">):</span>
+</span><span id="L-3509"><a href="#L-3509"><span class="linenos">3509</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span> <span class="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeNEQ</span>
+</span><span id="L-3510"><a href="#L-3510"><span class="linenos">3510</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">klass</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="L-3511"><a href="#L-3511"><span class="linenos">3511</span></a>
+</span><span id="L-3512"><a href="#L-3512"><span class="linenos">3512</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_null</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_boolean</span><span class="p">()</span>
+</span><span id="L-3513"><a href="#L-3513"><span class="linenos">3513</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-3514"><a href="#L-3514"><span class="linenos">3514</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3515"><a href="#L-3515"><span class="linenos">3515</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3516"><a href="#L-3516"><span class="linenos">3516</span></a>
+</span><span id="L-3517"><a href="#L-3517"><span class="linenos">3517</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-3518"><a href="#L-3518"><span class="linenos">3518</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="L-3519"><a href="#L-3519"><span class="linenos">3519</span></a>
+</span><span id="L-3520"><a href="#L-3520"><span class="linenos">3520</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
+</span><span id="L-3521"><a href="#L-3521"><span class="linenos">3521</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">(</span><span class="n">with_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3522"><a href="#L-3522"><span class="linenos">3522</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="L-3523"><a href="#L-3523"><span class="linenos">3523</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unnest</span><span class="o">=</span><span class="n">unnest</span><span class="p">)</span>
+</span><span id="L-3524"><a href="#L-3524"><span class="linenos">3524</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">)):</span>
+</span><span id="L-3525"><a href="#L-3525"><span class="linenos">3525</span></a> <span class="n">matched_l_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span>
+</span><span id="L-3526"><a href="#L-3526"><span class="linenos">3526</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="L-3527"><a href="#L-3527"><span class="linenos">3527</span></a>
+</span><span id="L-3528"><a href="#L-3528"><span class="linenos">3528</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="L-3529"><a href="#L-3529"><span class="linenos">3529</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">query</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="L-3530"><a href="#L-3530"><span class="linenos">3530</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3531"><a href="#L-3531"><span class="linenos">3531</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-3532"><a href="#L-3532"><span class="linenos">3532</span></a>
+</span><span id="L-3533"><a href="#L-3533"><span class="linenos">3533</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
+</span><span id="L-3534"><a href="#L-3534"><span class="linenos">3534</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3535"><a href="#L-3535"><span class="linenos">3535</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">):</span>
+</span><span id="L-3536"><a href="#L-3536"><span class="linenos">3536</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting ]&quot;</span><span class="p">)</span>
+</span><span id="L-3537"><a href="#L-3537"><span class="linenos">3537</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3538"><a href="#L-3538"><span class="linenos">3538</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">field</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
+</span><span id="L-3539"><a href="#L-3539"><span class="linenos">3539</span></a>
+</span><span id="L-3540"><a href="#L-3540"><span class="linenos">3540</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3541"><a href="#L-3541"><span class="linenos">3541</span></a>
-</span><span id="L-3542"><a href="#L-3542"><span class="linenos">3542</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-3543"><a href="#L-3543"><span class="linenos">3543</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-3544"><a href="#L-3544"><span class="linenos">3544</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3545"><a href="#L-3545"><span class="linenos">3545</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="L-3546"><a href="#L-3546"><span class="linenos">3546</span></a>
-</span><span id="L-3547"><a href="#L-3547"><span class="linenos">3547</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="L-3548"><a href="#L-3548"><span class="linenos">3548</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span>
-</span><span id="L-3549"><a href="#L-3549"><span class="linenos">3549</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">table</span>
-</span><span id="L-3550"><a href="#L-3550"><span class="linenos">3550</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span>
-</span><span id="L-3551"><a href="#L-3551"><span class="linenos">3551</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;IS&quot;</span>
-</span><span id="L-3552"><a href="#L-3552"><span class="linenos">3552</span></a> <span class="p">):</span>
-</span><span id="L-3553"><a href="#L-3553"><span class="linenos">3553</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-3554"><a href="#L-3554"><span class="linenos">3554</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3542"><a href="#L-3542"><span class="linenos">3542</span></a> <span class="k">def</span> <span class="nf">_parse_between</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">:</span>
+</span><span id="L-3543"><a href="#L-3543"><span class="linenos">3543</span></a> <span class="n">low</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-3544"><a href="#L-3544"><span class="linenos">3544</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span>
+</span><span id="L-3545"><a href="#L-3545"><span class="linenos">3545</span></a> <span class="n">high</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-3546"><a href="#L-3546"><span class="linenos">3546</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">low</span><span class="o">=</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="o">=</span><span class="n">high</span><span class="p">)</span>
+</span><span id="L-3547"><a href="#L-3547"><span class="linenos">3547</span></a>
+</span><span id="L-3548"><a href="#L-3548"><span class="linenos">3548</span></a> <span class="k">def</span> <span class="nf">_parse_escape</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3549"><a href="#L-3549"><span class="linenos">3549</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">):</span>
+</span><span id="L-3550"><a href="#L-3550"><span class="linenos">3550</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3551"><a href="#L-3551"><span class="linenos">3551</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Escape</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="L-3552"><a href="#L-3552"><span class="linenos">3552</span></a>
+</span><span id="L-3553"><a href="#L-3553"><span class="linenos">3553</span></a> <span class="k">def</span> <span class="nf">_parse_interval</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">]:</span>
+</span><span id="L-3554"><a href="#L-3554"><span class="linenos">3554</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-3555"><a href="#L-3555"><span class="linenos">3555</span></a>
-</span><span id="L-3556"><a href="#L-3556"><span class="linenos">3556</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="L-3557"><a href="#L-3557"><span class="linenos">3557</span></a> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-3558"><a href="#L-3558"><span class="linenos">3558</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3559"><a href="#L-3559"><span class="linenos">3559</span></a> <span class="p">)</span>
-</span><span id="L-3560"><a href="#L-3560"><span class="linenos">3560</span></a>
-</span><span id="L-3561"><a href="#L-3561"><span class="linenos">3561</span></a> <span class="c1"># Most dialects support, e.g., the form INTERVAL &#39;5&#39; day, thus we try to parse</span>
-</span><span id="L-3562"><a href="#L-3562"><span class="linenos">3562</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
-</span><span id="L-3563"><a href="#L-3563"><span class="linenos">3563</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="L-3564"><a href="#L-3564"><span class="linenos">3564</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-3565"><a href="#L-3565"><span class="linenos">3565</span></a> <span class="k">elif</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="L-3566"><a href="#L-3566"><span class="linenos">3566</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
-</span><span id="L-3567"><a href="#L-3567"><span class="linenos">3567</span></a>
-</span><span id="L-3568"><a href="#L-3568"><span class="linenos">3568</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="L-3569"><a href="#L-3569"><span class="linenos">3569</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="L-3570"><a href="#L-3570"><span class="linenos">3570</span></a> <span class="c1"># This is not actually a unit, it&#39;s something else (e.g. a &quot;window side&quot;)</span>
-</span><span id="L-3571"><a href="#L-3571"><span class="linenos">3571</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3572"><a href="#L-3572"><span class="linenos">3572</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-3573"><a href="#L-3573"><span class="linenos">3573</span></a>
-</span><span id="L-3574"><a href="#L-3574"><span class="linenos">3574</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-</span><span id="L-3575"><a href="#L-3575"><span class="linenos">3575</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-3576"><a href="#L-3576"><span class="linenos">3576</span></a>
-</span><span id="L-3577"><a href="#L-3577"><span class="linenos">3577</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
-</span><span id="L-3578"><a href="#L-3578"><span class="linenos">3578</span></a>
-</span><span id="L-3579"><a href="#L-3579"><span class="linenos">3579</span></a> <span class="k">def</span> <span class="nf">_parse_bitwise</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3580"><a href="#L-3580"><span class="linenos">3580</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="L-3581"><a href="#L-3581"><span class="linenos">3581</span></a>
-</span><span id="L-3582"><a href="#L-3582"><span class="linenos">3582</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-3583"><a href="#L-3583"><span class="linenos">3583</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">):</span>
-</span><span id="L-3584"><a href="#L-3584"><span class="linenos">3584</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3585"><a href="#L-3585"><span class="linenos">3585</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
-</span><span id="L-3586"><a href="#L-3586"><span class="linenos">3586</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3587"><a href="#L-3587"><span class="linenos">3587</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
-</span><span id="L-3588"><a href="#L-3588"><span class="linenos">3588</span></a> <span class="p">)</span>
-</span><span id="L-3589"><a href="#L-3589"><span class="linenos">3589</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">):</span>
-</span><span id="L-3590"><a href="#L-3590"><span class="linenos">3590</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3591"><a href="#L-3591"><span class="linenos">3591</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">,</span>
-</span><span id="L-3592"><a href="#L-3592"><span class="linenos">3592</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3593"><a href="#L-3593"><span class="linenos">3593</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
-</span><span id="L-3594"><a href="#L-3594"><span class="linenos">3594</span></a> <span class="n">safe</span><span class="o">=</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">,</span>
-</span><span id="L-3595"><a href="#L-3595"><span class="linenos">3595</span></a> <span class="p">)</span>
-</span><span id="L-3596"><a href="#L-3596"><span class="linenos">3596</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">):</span>
-</span><span id="L-3597"><a href="#L-3597"><span class="linenos">3597</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
-</span><span id="L-3598"><a href="#L-3598"><span class="linenos">3598</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
-</span><span id="L-3599"><a href="#L-3599"><span class="linenos">3599</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3600"><a href="#L-3600"><span class="linenos">3600</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="L-3601"><a href="#L-3601"><span class="linenos">3601</span></a> <span class="p">)</span>
-</span><span id="L-3602"><a href="#L-3602"><span class="linenos">3602</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
-</span><span id="L-3603"><a href="#L-3603"><span class="linenos">3603</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3604"><a href="#L-3604"><span class="linenos">3604</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3556"><a href="#L-3556"><span class="linenos">3556</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">)</span> <span class="ow">and</span> <span class="n">match_interval</span><span class="p">:</span>
+</span><span id="L-3557"><a href="#L-3557"><span class="linenos">3557</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3558"><a href="#L-3558"><span class="linenos">3558</span></a>
+</span><span id="L-3559"><a href="#L-3559"><span class="linenos">3559</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-3560"><a href="#L-3560"><span class="linenos">3560</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-3561"><a href="#L-3561"><span class="linenos">3561</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3562"><a href="#L-3562"><span class="linenos">3562</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3563"><a href="#L-3563"><span class="linenos">3563</span></a>
+</span><span id="L-3564"><a href="#L-3564"><span class="linenos">3564</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="L-3565"><a href="#L-3565"><span class="linenos">3565</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span>
+</span><span id="L-3566"><a href="#L-3566"><span class="linenos">3566</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">table</span>
+</span><span id="L-3567"><a href="#L-3567"><span class="linenos">3567</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span>
+</span><span id="L-3568"><a href="#L-3568"><span class="linenos">3568</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;IS&quot;</span>
+</span><span id="L-3569"><a href="#L-3569"><span class="linenos">3569</span></a> <span class="p">):</span>
+</span><span id="L-3570"><a href="#L-3570"><span class="linenos">3570</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3571"><a href="#L-3571"><span class="linenos">3571</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3572"><a href="#L-3572"><span class="linenos">3572</span></a>
+</span><span id="L-3573"><a href="#L-3573"><span class="linenos">3573</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="L-3574"><a href="#L-3574"><span class="linenos">3574</span></a> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3575"><a href="#L-3575"><span class="linenos">3575</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3576"><a href="#L-3576"><span class="linenos">3576</span></a> <span class="p">)</span>
+</span><span id="L-3577"><a href="#L-3577"><span class="linenos">3577</span></a>
+</span><span id="L-3578"><a href="#L-3578"><span class="linenos">3578</span></a> <span class="c1"># Most dialects support, e.g., the form INTERVAL &#39;5&#39; day, thus we try to parse</span>
+</span><span id="L-3579"><a href="#L-3579"><span class="linenos">3579</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
+</span><span id="L-3580"><a href="#L-3580"><span class="linenos">3580</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="L-3581"><a href="#L-3581"><span class="linenos">3581</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-3582"><a href="#L-3582"><span class="linenos">3582</span></a> <span class="k">elif</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="L-3583"><a href="#L-3583"><span class="linenos">3583</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
+</span><span id="L-3584"><a href="#L-3584"><span class="linenos">3584</span></a>
+</span><span id="L-3585"><a href="#L-3585"><span class="linenos">3585</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="L-3586"><a href="#L-3586"><span class="linenos">3586</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="L-3587"><a href="#L-3587"><span class="linenos">3587</span></a> <span class="c1"># This is not actually a unit, it&#39;s something else (e.g. a &quot;window side&quot;)</span>
+</span><span id="L-3588"><a href="#L-3588"><span class="linenos">3588</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3589"><a href="#L-3589"><span class="linenos">3589</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-3590"><a href="#L-3590"><span class="linenos">3590</span></a>
+</span><span id="L-3591"><a href="#L-3591"><span class="linenos">3591</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="L-3592"><a href="#L-3592"><span class="linenos">3592</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-3593"><a href="#L-3593"><span class="linenos">3593</span></a>
+</span><span id="L-3594"><a href="#L-3594"><span class="linenos">3594</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
+</span><span id="L-3595"><a href="#L-3595"><span class="linenos">3595</span></a>
+</span><span id="L-3596"><a href="#L-3596"><span class="linenos">3596</span></a> <span class="k">def</span> <span class="nf">_parse_bitwise</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3597"><a href="#L-3597"><span class="linenos">3597</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3598"><a href="#L-3598"><span class="linenos">3598</span></a>
+</span><span id="L-3599"><a href="#L-3599"><span class="linenos">3599</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-3600"><a href="#L-3600"><span class="linenos">3600</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">):</span>
+</span><span id="L-3601"><a href="#L-3601"><span class="linenos">3601</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3602"><a href="#L-3602"><span class="linenos">3602</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
+</span><span id="L-3603"><a href="#L-3603"><span class="linenos">3603</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3604"><a href="#L-3604"><span class="linenos">3604</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
</span><span id="L-3605"><a href="#L-3605"><span class="linenos">3605</span></a> <span class="p">)</span>
-</span><span id="L-3606"><a href="#L-3606"><span class="linenos">3606</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3607"><a href="#L-3607"><span class="linenos">3607</span></a> <span class="k">break</span>
-</span><span id="L-3608"><a href="#L-3608"><span class="linenos">3608</span></a>
-</span><span id="L-3609"><a href="#L-3609"><span class="linenos">3609</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3610"><a href="#L-3610"><span class="linenos">3610</span></a>
-</span><span id="L-3611"><a href="#L-3611"><span class="linenos">3611</span></a> <span class="k">def</span> <span class="nf">_parse_term</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3612"><a href="#L-3612"><span class="linenos">3612</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">TERM</span><span class="p">)</span>
-</span><span id="L-3613"><a href="#L-3613"><span class="linenos">3613</span></a>
-</span><span id="L-3614"><a href="#L-3614"><span class="linenos">3614</span></a> <span class="k">def</span> <span class="nf">_parse_factor</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3615"><a href="#L-3615"><span class="linenos">3615</span></a> <span class="n">parse_method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exponent</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span>
-</span><span id="L-3616"><a href="#L-3616"><span class="linenos">3616</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="L-3617"><a href="#L-3617"><span class="linenos">3617</span></a>
-</span><span id="L-3618"><a href="#L-3618"><span class="linenos">3618</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">):</span>
-</span><span id="L-3619"><a href="#L-3619"><span class="linenos">3619</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3620"><a href="#L-3620"><span class="linenos">3620</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
-</span><span id="L-3621"><a href="#L-3621"><span class="linenos">3621</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3622"><a href="#L-3622"><span class="linenos">3622</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
-</span><span id="L-3623"><a href="#L-3623"><span class="linenos">3623</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
-</span><span id="L-3624"><a href="#L-3624"><span class="linenos">3624</span></a> <span class="p">)</span>
-</span><span id="L-3625"><a href="#L-3625"><span class="linenos">3625</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">Div</span><span class="p">):</span>
-</span><span id="L-3626"><a href="#L-3626"><span class="linenos">3626</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;typed&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span>
-</span><span id="L-3627"><a href="#L-3627"><span class="linenos">3627</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;safe&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span>
-</span><span id="L-3628"><a href="#L-3628"><span class="linenos">3628</span></a>
-</span><span id="L-3629"><a href="#L-3629"><span class="linenos">3629</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3606"><a href="#L-3606"><span class="linenos">3606</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">):</span>
+</span><span id="L-3607"><a href="#L-3607"><span class="linenos">3607</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3608"><a href="#L-3608"><span class="linenos">3608</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">,</span>
+</span><span id="L-3609"><a href="#L-3609"><span class="linenos">3609</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3610"><a href="#L-3610"><span class="linenos">3610</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
+</span><span id="L-3611"><a href="#L-3611"><span class="linenos">3611</span></a> <span class="n">safe</span><span class="o">=</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">,</span>
+</span><span id="L-3612"><a href="#L-3612"><span class="linenos">3612</span></a> <span class="p">)</span>
+</span><span id="L-3613"><a href="#L-3613"><span class="linenos">3613</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">):</span>
+</span><span id="L-3614"><a href="#L-3614"><span class="linenos">3614</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
+</span><span id="L-3615"><a href="#L-3615"><span class="linenos">3615</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
+</span><span id="L-3616"><a href="#L-3616"><span class="linenos">3616</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3617"><a href="#L-3617"><span class="linenos">3617</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3618"><a href="#L-3618"><span class="linenos">3618</span></a> <span class="p">)</span>
+</span><span id="L-3619"><a href="#L-3619"><span class="linenos">3619</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
+</span><span id="L-3620"><a href="#L-3620"><span class="linenos">3620</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3621"><a href="#L-3621"><span class="linenos">3621</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="L-3622"><a href="#L-3622"><span class="linenos">3622</span></a> <span class="p">)</span>
+</span><span id="L-3623"><a href="#L-3623"><span class="linenos">3623</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3624"><a href="#L-3624"><span class="linenos">3624</span></a> <span class="k">break</span>
+</span><span id="L-3625"><a href="#L-3625"><span class="linenos">3625</span></a>
+</span><span id="L-3626"><a href="#L-3626"><span class="linenos">3626</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3627"><a href="#L-3627"><span class="linenos">3627</span></a>
+</span><span id="L-3628"><a href="#L-3628"><span class="linenos">3628</span></a> <span class="k">def</span> <span class="nf">_parse_term</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3629"><a href="#L-3629"><span class="linenos">3629</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">TERM</span><span class="p">)</span>
</span><span id="L-3630"><a href="#L-3630"><span class="linenos">3630</span></a>
-</span><span id="L-3631"><a href="#L-3631"><span class="linenos">3631</span></a> <span class="k">def</span> <span class="nf">_parse_exponent</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3632"><a href="#L-3632"><span class="linenos">3632</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
-</span><span id="L-3633"><a href="#L-3633"><span class="linenos">3633</span></a>
-</span><span id="L-3634"><a href="#L-3634"><span class="linenos">3634</span></a> <span class="k">def</span> <span class="nf">_parse_unary</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3635"><a href="#L-3635"><span class="linenos">3635</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">):</span>
-</span><span id="L-3636"><a href="#L-3636"><span class="linenos">3636</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="L-3637"><a href="#L-3637"><span class="linenos">3637</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">())</span>
-</span><span id="L-3638"><a href="#L-3638"><span class="linenos">3638</span></a>
-</span><span id="L-3639"><a href="#L-3639"><span class="linenos">3639</span></a> <span class="k">def</span> <span class="nf">_parse_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3640"><a href="#L-3640"><span class="linenos">3640</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">parse_interval</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">()</span>
-</span><span id="L-3641"><a href="#L-3641"><span class="linenos">3641</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
-</span><span id="L-3642"><a href="#L-3642"><span class="linenos">3642</span></a> <span class="c1"># Convert INTERVAL &#39;val_1&#39; unit_1 ... &#39;val_n&#39; unit_n into a sum of intervals</span>
-</span><span id="L-3643"><a href="#L-3643"><span class="linenos">3643</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-3644"><a href="#L-3644"><span class="linenos">3644</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span> <span class="c1"># type: ignore</span>
-</span><span id="L-3645"><a href="#L-3645"><span class="linenos">3645</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">(</span><span class="n">match_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-3646"><a href="#L-3646"><span class="linenos">3646</span></a> <span class="p">)</span>
+</span><span id="L-3631"><a href="#L-3631"><span class="linenos">3631</span></a> <span class="k">def</span> <span class="nf">_parse_factor</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3632"><a href="#L-3632"><span class="linenos">3632</span></a> <span class="n">parse_method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exponent</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span>
+</span><span id="L-3633"><a href="#L-3633"><span class="linenos">3633</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="L-3634"><a href="#L-3634"><span class="linenos">3634</span></a>
+</span><span id="L-3635"><a href="#L-3635"><span class="linenos">3635</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">):</span>
+</span><span id="L-3636"><a href="#L-3636"><span class="linenos">3636</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3637"><a href="#L-3637"><span class="linenos">3637</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
+</span><span id="L-3638"><a href="#L-3638"><span class="linenos">3638</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3639"><a href="#L-3639"><span class="linenos">3639</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
+</span><span id="L-3640"><a href="#L-3640"><span class="linenos">3640</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
+</span><span id="L-3641"><a href="#L-3641"><span class="linenos">3641</span></a> <span class="p">)</span>
+</span><span id="L-3642"><a href="#L-3642"><span class="linenos">3642</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">Div</span><span class="p">):</span>
+</span><span id="L-3643"><a href="#L-3643"><span class="linenos">3643</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;typed&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span>
+</span><span id="L-3644"><a href="#L-3644"><span class="linenos">3644</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;safe&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span>
+</span><span id="L-3645"><a href="#L-3645"><span class="linenos">3645</span></a>
+</span><span id="L-3646"><a href="#L-3646"><span class="linenos">3646</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3647"><a href="#L-3647"><span class="linenos">3647</span></a>
-</span><span id="L-3648"><a href="#L-3648"><span class="linenos">3648</span></a> <span class="k">return</span> <span class="n">interval</span>
-</span><span id="L-3649"><a href="#L-3649"><span class="linenos">3649</span></a>
-</span><span id="L-3650"><a href="#L-3650"><span class="linenos">3650</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3651"><a href="#L-3651"><span class="linenos">3651</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-3652"><a href="#L-3652"><span class="linenos">3652</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-3653"><a href="#L-3653"><span class="linenos">3653</span></a>
-</span><span id="L-3654"><a href="#L-3654"><span class="linenos">3654</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
-</span><span id="L-3655"><a href="#L-3655"><span class="linenos">3655</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="L-3656"><a href="#L-3656"><span class="linenos">3656</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_LITERAL_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">data_type</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3657"><a href="#L-3657"><span class="linenos">3657</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-3658"><a href="#L-3658"><span class="linenos">3658</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">data_type</span><span class="p">)</span>
-</span><span id="L-3659"><a href="#L-3659"><span class="linenos">3659</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">data_type</span><span class="p">)</span>
-</span><span id="L-3660"><a href="#L-3660"><span class="linenos">3660</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data_type</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-3661"><a href="#L-3661"><span class="linenos">3661</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-3662"><a href="#L-3662"><span class="linenos">3662</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-3663"><a href="#L-3663"><span class="linenos">3663</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
+</span><span id="L-3648"><a href="#L-3648"><span class="linenos">3648</span></a> <span class="k">def</span> <span class="nf">_parse_exponent</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3649"><a href="#L-3649"><span class="linenos">3649</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
+</span><span id="L-3650"><a href="#L-3650"><span class="linenos">3650</span></a>
+</span><span id="L-3651"><a href="#L-3651"><span class="linenos">3651</span></a> <span class="k">def</span> <span class="nf">_parse_unary</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3652"><a href="#L-3652"><span class="linenos">3652</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">):</span>
+</span><span id="L-3653"><a href="#L-3653"><span class="linenos">3653</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-3654"><a href="#L-3654"><span class="linenos">3654</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">())</span>
+</span><span id="L-3655"><a href="#L-3655"><span class="linenos">3655</span></a>
+</span><span id="L-3656"><a href="#L-3656"><span class="linenos">3656</span></a> <span class="k">def</span> <span class="nf">_parse_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3657"><a href="#L-3657"><span class="linenos">3657</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">parse_interval</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">()</span>
+</span><span id="L-3658"><a href="#L-3658"><span class="linenos">3658</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
+</span><span id="L-3659"><a href="#L-3659"><span class="linenos">3659</span></a> <span class="c1"># Convert INTERVAL &#39;val_1&#39; unit_1 ... &#39;val_n&#39; unit_n into a sum of intervals</span>
+</span><span id="L-3660"><a href="#L-3660"><span class="linenos">3660</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-3661"><a href="#L-3661"><span class="linenos">3661</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span> <span class="c1"># type: ignore</span>
+</span><span id="L-3662"><a href="#L-3662"><span class="linenos">3662</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">(</span><span class="n">match_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3663"><a href="#L-3663"><span class="linenos">3663</span></a> <span class="p">)</span>
</span><span id="L-3664"><a href="#L-3664"><span class="linenos">3664</span></a>
-</span><span id="L-3665"><a href="#L-3665"><span class="linenos">3665</span></a> <span class="k">return</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3665"><a href="#L-3665"><span class="linenos">3665</span></a> <span class="k">return</span> <span class="n">interval</span>
</span><span id="L-3666"><a href="#L-3666"><span class="linenos">3666</span></a>
-</span><span id="L-3667"><a href="#L-3667"><span class="linenos">3667</span></a> <span class="k">def</span> <span class="nf">_parse_type_size</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">]:</span>
-</span><span id="L-3668"><a href="#L-3668"><span class="linenos">3668</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="L-3669"><a href="#L-3669"><span class="linenos">3669</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-3670"><a href="#L-3670"><span class="linenos">3670</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3671"><a href="#L-3671"><span class="linenos">3671</span></a>
-</span><span id="L-3672"><a href="#L-3672"><span class="linenos">3672</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3673"><a href="#L-3673"><span class="linenos">3673</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3674"><a href="#L-3674"><span class="linenos">3674</span></a> <span class="p">)</span>
-</span><span id="L-3675"><a href="#L-3675"><span class="linenos">3675</span></a>
-</span><span id="L-3676"><a href="#L-3676"><span class="linenos">3676</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
-</span><span id="L-3677"><a href="#L-3677"><span class="linenos">3677</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3678"><a href="#L-3678"><span class="linenos">3678</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3679"><a href="#L-3679"><span class="linenos">3679</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3680"><a href="#L-3680"><span class="linenos">3680</span></a>
-</span><span id="L-3681"><a href="#L-3681"><span class="linenos">3681</span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SYSUDTLIB&quot;</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">)</span>
-</span><span id="L-3682"><a href="#L-3682"><span class="linenos">3682</span></a>
-</span><span id="L-3683"><a href="#L-3683"><span class="linenos">3683</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">):</span>
-</span><span id="L-3684"><a href="#L-3684"><span class="linenos">3684</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">allow_identifiers</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
-</span><span id="L-3685"><a href="#L-3685"><span class="linenos">3685</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
-</span><span id="L-3686"><a href="#L-3686"><span class="linenos">3686</span></a> <span class="p">)</span>
-</span><span id="L-3687"><a href="#L-3687"><span class="linenos">3687</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
-</span><span id="L-3688"><a href="#L-3688"><span class="linenos">3688</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">identifier</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-3689"><a href="#L-3689"><span class="linenos">3689</span></a>
-</span><span id="L-3690"><a href="#L-3690"><span class="linenos">3690</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-3691"><a href="#L-3691"><span class="linenos">3691</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unexpected identifier&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-3667"><a href="#L-3667"><span class="linenos">3667</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-3668"><a href="#L-3668"><span class="linenos">3668</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3669"><a href="#L-3669"><span class="linenos">3669</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-3670"><a href="#L-3670"><span class="linenos">3670</span></a>
+</span><span id="L-3671"><a href="#L-3671"><span class="linenos">3671</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
+</span><span id="L-3672"><a href="#L-3672"><span class="linenos">3672</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="L-3673"><a href="#L-3673"><span class="linenos">3673</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_LITERAL_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">data_type</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3674"><a href="#L-3674"><span class="linenos">3674</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="L-3675"><a href="#L-3675"><span class="linenos">3675</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">data_type</span><span class="p">)</span>
+</span><span id="L-3676"><a href="#L-3676"><span class="linenos">3676</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">data_type</span><span class="p">)</span>
+</span><span id="L-3677"><a href="#L-3677"><span class="linenos">3677</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data_type</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-3678"><a href="#L-3678"><span class="linenos">3678</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3679"><a href="#L-3679"><span class="linenos">3679</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-3680"><a href="#L-3680"><span class="linenos">3680</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
+</span><span id="L-3681"><a href="#L-3681"><span class="linenos">3681</span></a>
+</span><span id="L-3682"><a href="#L-3682"><span class="linenos">3682</span></a> <span class="k">return</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3683"><a href="#L-3683"><span class="linenos">3683</span></a>
+</span><span id="L-3684"><a href="#L-3684"><span class="linenos">3684</span></a> <span class="k">def</span> <span class="nf">_parse_type_size</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">]:</span>
+</span><span id="L-3685"><a href="#L-3685"><span class="linenos">3685</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="L-3686"><a href="#L-3686"><span class="linenos">3686</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-3687"><a href="#L-3687"><span class="linenos">3687</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3688"><a href="#L-3688"><span class="linenos">3688</span></a>
+</span><span id="L-3689"><a href="#L-3689"><span class="linenos">3689</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3690"><a href="#L-3690"><span class="linenos">3690</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3691"><a href="#L-3691"><span class="linenos">3691</span></a> <span class="p">)</span>
</span><span id="L-3692"><a href="#L-3692"><span class="linenos">3692</span></a>
-</span><span id="L-3693"><a href="#L-3693"><span class="linenos">3693</span></a> <span class="k">if</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">:</span>
-</span><span id="L-3694"><a href="#L-3694"><span class="linenos">3694</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="L-3695"><a href="#L-3695"><span class="linenos">3695</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span><span class="p">:</span>
-</span><span id="L-3696"><a href="#L-3696"><span class="linenos">3696</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-3693"><a href="#L-3693"><span class="linenos">3693</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
+</span><span id="L-3694"><a href="#L-3694"><span class="linenos">3694</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3695"><a href="#L-3695"><span class="linenos">3695</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3696"><a href="#L-3696"><span class="linenos">3696</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-3697"><a href="#L-3697"><span class="linenos">3697</span></a>
-</span><span id="L-3698"><a href="#L-3698"><span class="linenos">3698</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
-</span><span id="L-3699"><a href="#L-3699"><span class="linenos">3699</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-3700"><a href="#L-3700"><span class="linenos">3700</span></a>
-</span><span id="L-3701"><a href="#L-3701"><span class="linenos">3701</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3702"><a href="#L-3702"><span class="linenos">3702</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3703"><a href="#L-3703"><span class="linenos">3703</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-3704"><a href="#L-3704"><span class="linenos">3704</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3705"><a href="#L-3705"><span class="linenos">3705</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3706"><a href="#L-3706"><span class="linenos">3706</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3707"><a href="#L-3707"><span class="linenos">3707</span></a>
-</span><span id="L-3708"><a href="#L-3708"><span class="linenos">3708</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="L-3698"><a href="#L-3698"><span class="linenos">3698</span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SYSUDTLIB&quot;</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">)</span>
+</span><span id="L-3699"><a href="#L-3699"><span class="linenos">3699</span></a>
+</span><span id="L-3700"><a href="#L-3700"><span class="linenos">3700</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">):</span>
+</span><span id="L-3701"><a href="#L-3701"><span class="linenos">3701</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">allow_identifiers</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
+</span><span id="L-3702"><a href="#L-3702"><span class="linenos">3702</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
+</span><span id="L-3703"><a href="#L-3703"><span class="linenos">3703</span></a> <span class="p">)</span>
+</span><span id="L-3704"><a href="#L-3704"><span class="linenos">3704</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
+</span><span id="L-3705"><a href="#L-3705"><span class="linenos">3705</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">identifier</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-3706"><a href="#L-3706"><span class="linenos">3706</span></a>
+</span><span id="L-3707"><a href="#L-3707"><span class="linenos">3707</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-3708"><a href="#L-3708"><span class="linenos">3708</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unexpected identifier&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-3709"><a href="#L-3709"><span class="linenos">3709</span></a>
-</span><span id="L-3710"><a href="#L-3710"><span class="linenos">3710</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">:</span>
-</span><span id="L-3711"><a href="#L-3711"><span class="linenos">3711</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PseudoType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-3712"><a href="#L-3712"><span class="linenos">3712</span></a>
-</span><span id="L-3713"><a href="#L-3713"><span class="linenos">3713</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">:</span>
-</span><span id="L-3714"><a href="#L-3714"><span class="linenos">3714</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ObjectIdentifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-3715"><a href="#L-3715"><span class="linenos">3715</span></a>
-</span><span id="L-3716"><a href="#L-3716"><span class="linenos">3716</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPE_TOKENS</span>
-</span><span id="L-3717"><a href="#L-3717"><span class="linenos">3717</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_TYPE_TOKENS</span>
-</span><span id="L-3718"><a href="#L-3718"><span class="linenos">3718</span></a> <span class="n">is_aggregate</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_TYPE_TOKENS</span>
-</span><span id="L-3719"><a href="#L-3719"><span class="linenos">3719</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3720"><a href="#L-3720"><span class="linenos">3720</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3721"><a href="#L-3721"><span class="linenos">3721</span></a>
-</span><span id="L-3722"><a href="#L-3722"><span class="linenos">3722</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-3723"><a href="#L-3723"><span class="linenos">3723</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="L-3724"><a href="#L-3724"><span class="linenos">3724</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">)</span>
-</span><span id="L-3725"><a href="#L-3725"><span class="linenos">3725</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
-</span><span id="L-3726"><a href="#L-3726"><span class="linenos">3726</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="L-3727"><a href="#L-3727"><span class="linenos">3727</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
-</span><span id="L-3728"><a href="#L-3728"><span class="linenos">3728</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
-</span><span id="L-3729"><a href="#L-3729"><span class="linenos">3729</span></a> <span class="p">)</span>
-</span><span id="L-3730"><a href="#L-3730"><span class="linenos">3730</span></a> <span class="p">)</span>
-</span><span id="L-3731"><a href="#L-3731"><span class="linenos">3731</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">:</span>
-</span><span id="L-3732"><a href="#L-3732"><span class="linenos">3732</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
-</span><span id="L-3733"><a href="#L-3733"><span class="linenos">3733</span></a> <span class="k">elif</span> <span class="n">is_aggregate</span><span class="p">:</span>
-</span><span id="L-3734"><a href="#L-3734"><span class="linenos">3734</span></a> <span class="n">func_or_ident</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
-</span><span id="L-3735"><a href="#L-3735"><span class="linenos">3735</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
-</span><span id="L-3736"><a href="#L-3736"><span class="linenos">3736</span></a> <span class="p">)</span>
-</span><span id="L-3737"><a href="#L-3737"><span class="linenos">3737</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">func_or_ident</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="L-3738"><a href="#L-3738"><span class="linenos">3738</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3739"><a href="#L-3739"><span class="linenos">3739</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="L-3740"><a href="#L-3740"><span class="linenos">3740</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
-</span><span id="L-3741"><a href="#L-3741"><span class="linenos">3741</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
-</span><span id="L-3742"><a href="#L-3742"><span class="linenos">3742</span></a> <span class="p">)</span>
-</span><span id="L-3743"><a href="#L-3743"><span class="linenos">3743</span></a> <span class="p">)</span>
-</span><span id="L-3744"><a href="#L-3744"><span class="linenos">3744</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">func_or_ident</span><span class="p">)</span>
-</span><span id="L-3745"><a href="#L-3745"><span class="linenos">3745</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3746"><a href="#L-3746"><span class="linenos">3746</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type_size</span><span class="p">)</span>
-</span><span id="L-3747"><a href="#L-3747"><span class="linenos">3747</span></a>
-</span><span id="L-3748"><a href="#L-3748"><span class="linenos">3748</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
-</span><span id="L-3749"><a href="#L-3749"><span class="linenos">3749</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-3750"><a href="#L-3750"><span class="linenos">3750</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3751"><a href="#L-3751"><span class="linenos">3751</span></a>
-</span><span id="L-3752"><a href="#L-3752"><span class="linenos">3752</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3753"><a href="#L-3753"><span class="linenos">3753</span></a>
-</span><span id="L-3754"><a href="#L-3754"><span class="linenos">3754</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3755"><a href="#L-3755"><span class="linenos">3755</span></a> <span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3756"><a href="#L-3756"><span class="linenos">3756</span></a>
-</span><span id="L-3757"><a href="#L-3757"><span class="linenos">3757</span></a> <span class="k">if</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
-</span><span id="L-3758"><a href="#L-3758"><span class="linenos">3758</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="L-3759"><a href="#L-3759"><span class="linenos">3759</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">(</span><span class="n">type_required</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-3760"><a href="#L-3760"><span class="linenos">3760</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3761"><a href="#L-3761"><span class="linenos">3761</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="L-3762"><a href="#L-3762"><span class="linenos">3762</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
-</span><span id="L-3763"><a href="#L-3763"><span class="linenos">3763</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
-</span><span id="L-3764"><a href="#L-3764"><span class="linenos">3764</span></a> <span class="p">)</span>
-</span><span id="L-3765"><a href="#L-3765"><span class="linenos">3765</span></a> <span class="p">)</span>
-</span><span id="L-3766"><a href="#L-3766"><span class="linenos">3766</span></a>
-</span><span id="L-3767"><a href="#L-3767"><span class="linenos">3767</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
-</span><span id="L-3768"><a href="#L-3768"><span class="linenos">3768</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting &gt;&quot;</span><span class="p">)</span>
-</span><span id="L-3769"><a href="#L-3769"><span class="linenos">3769</span></a>
-</span><span id="L-3770"><a href="#L-3770"><span class="linenos">3770</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)):</span>
-</span><span id="L-3771"><a href="#L-3771"><span class="linenos">3771</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
-</span><span id="L-3772"><a href="#L-3772"><span class="linenos">3772</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">))</span>
+</span><span id="L-3710"><a href="#L-3710"><span class="linenos">3710</span></a> <span class="k">if</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">:</span>
+</span><span id="L-3711"><a href="#L-3711"><span class="linenos">3711</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="L-3712"><a href="#L-3712"><span class="linenos">3712</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span><span class="p">:</span>
+</span><span id="L-3713"><a href="#L-3713"><span class="linenos">3713</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-3714"><a href="#L-3714"><span class="linenos">3714</span></a>
+</span><span id="L-3715"><a href="#L-3715"><span class="linenos">3715</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
+</span><span id="L-3716"><a href="#L-3716"><span class="linenos">3716</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-3717"><a href="#L-3717"><span class="linenos">3717</span></a>
+</span><span id="L-3718"><a href="#L-3718"><span class="linenos">3718</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3719"><a href="#L-3719"><span class="linenos">3719</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3720"><a href="#L-3720"><span class="linenos">3720</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-3721"><a href="#L-3721"><span class="linenos">3721</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3722"><a href="#L-3722"><span class="linenos">3722</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3723"><a href="#L-3723"><span class="linenos">3723</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3724"><a href="#L-3724"><span class="linenos">3724</span></a>
+</span><span id="L-3725"><a href="#L-3725"><span class="linenos">3725</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="L-3726"><a href="#L-3726"><span class="linenos">3726</span></a>
+</span><span id="L-3727"><a href="#L-3727"><span class="linenos">3727</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">:</span>
+</span><span id="L-3728"><a href="#L-3728"><span class="linenos">3728</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PseudoType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-3729"><a href="#L-3729"><span class="linenos">3729</span></a>
+</span><span id="L-3730"><a href="#L-3730"><span class="linenos">3730</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">:</span>
+</span><span id="L-3731"><a href="#L-3731"><span class="linenos">3731</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ObjectIdentifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-3732"><a href="#L-3732"><span class="linenos">3732</span></a>
+</span><span id="L-3733"><a href="#L-3733"><span class="linenos">3733</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPE_TOKENS</span>
+</span><span id="L-3734"><a href="#L-3734"><span class="linenos">3734</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_TYPE_TOKENS</span>
+</span><span id="L-3735"><a href="#L-3735"><span class="linenos">3735</span></a> <span class="n">is_aggregate</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_TYPE_TOKENS</span>
+</span><span id="L-3736"><a href="#L-3736"><span class="linenos">3736</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3737"><a href="#L-3737"><span class="linenos">3737</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3738"><a href="#L-3738"><span class="linenos">3738</span></a>
+</span><span id="L-3739"><a href="#L-3739"><span class="linenos">3739</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-3740"><a href="#L-3740"><span class="linenos">3740</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="L-3741"><a href="#L-3741"><span class="linenos">3741</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">)</span>
+</span><span id="L-3742"><a href="#L-3742"><span class="linenos">3742</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
+</span><span id="L-3743"><a href="#L-3743"><span class="linenos">3743</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="L-3744"><a href="#L-3744"><span class="linenos">3744</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="L-3745"><a href="#L-3745"><span class="linenos">3745</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="L-3746"><a href="#L-3746"><span class="linenos">3746</span></a> <span class="p">)</span>
+</span><span id="L-3747"><a href="#L-3747"><span class="linenos">3747</span></a> <span class="p">)</span>
+</span><span id="L-3748"><a href="#L-3748"><span class="linenos">3748</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">:</span>
+</span><span id="L-3749"><a href="#L-3749"><span class="linenos">3749</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
+</span><span id="L-3750"><a href="#L-3750"><span class="linenos">3750</span></a> <span class="k">elif</span> <span class="n">is_aggregate</span><span class="p">:</span>
+</span><span id="L-3751"><a href="#L-3751"><span class="linenos">3751</span></a> <span class="n">func_or_ident</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
+</span><span id="L-3752"><a href="#L-3752"><span class="linenos">3752</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
+</span><span id="L-3753"><a href="#L-3753"><span class="linenos">3753</span></a> <span class="p">)</span>
+</span><span id="L-3754"><a href="#L-3754"><span class="linenos">3754</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">func_or_ident</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="L-3755"><a href="#L-3755"><span class="linenos">3755</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3756"><a href="#L-3756"><span class="linenos">3756</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="L-3757"><a href="#L-3757"><span class="linenos">3757</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="L-3758"><a href="#L-3758"><span class="linenos">3758</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="L-3759"><a href="#L-3759"><span class="linenos">3759</span></a> <span class="p">)</span>
+</span><span id="L-3760"><a href="#L-3760"><span class="linenos">3760</span></a> <span class="p">)</span>
+</span><span id="L-3761"><a href="#L-3761"><span class="linenos">3761</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">func_or_ident</span><span class="p">)</span>
+</span><span id="L-3762"><a href="#L-3762"><span class="linenos">3762</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3763"><a href="#L-3763"><span class="linenos">3763</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type_size</span><span class="p">)</span>
+</span><span id="L-3764"><a href="#L-3764"><span class="linenos">3764</span></a>
+</span><span id="L-3765"><a href="#L-3765"><span class="linenos">3765</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
+</span><span id="L-3766"><a href="#L-3766"><span class="linenos">3766</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3767"><a href="#L-3767"><span class="linenos">3767</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3768"><a href="#L-3768"><span class="linenos">3768</span></a>
+</span><span id="L-3769"><a href="#L-3769"><span class="linenos">3769</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3770"><a href="#L-3770"><span class="linenos">3770</span></a>
+</span><span id="L-3771"><a href="#L-3771"><span class="linenos">3771</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-3772"><a href="#L-3772"><span class="linenos">3772</span></a> <span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3773"><a href="#L-3773"><span class="linenos">3773</span></a>
-</span><span id="L-3774"><a href="#L-3774"><span class="linenos">3774</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMESTAMPS</span><span class="p">:</span>
-</span><span id="L-3775"><a href="#L-3775"><span class="linenos">3775</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="L-3776"><a href="#L-3776"><span class="linenos">3776</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3777"><a href="#L-3777"><span class="linenos">3777</span></a> <span class="n">tz_type</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-3778"><a href="#L-3778"><span class="linenos">3778</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span>
-</span><span id="L-3779"><a href="#L-3779"><span class="linenos">3779</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMES</span>
-</span><span id="L-3780"><a href="#L-3780"><span class="linenos">3780</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span>
-</span><span id="L-3781"><a href="#L-3781"><span class="linenos">3781</span></a> <span class="p">)</span>
-</span><span id="L-3782"><a href="#L-3782"><span class="linenos">3782</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">tz_type</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-3783"><a href="#L-3783"><span class="linenos">3783</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="L-3784"><a href="#L-3784"><span class="linenos">3784</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3785"><a href="#L-3785"><span class="linenos">3785</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-3786"><a href="#L-3786"><span class="linenos">3786</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="L-3787"><a href="#L-3787"><span class="linenos">3787</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3788"><a href="#L-3788"><span class="linenos">3788</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
-</span><span id="L-3789"><a href="#L-3789"><span class="linenos">3789</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="L-3774"><a href="#L-3774"><span class="linenos">3774</span></a> <span class="k">if</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
+</span><span id="L-3775"><a href="#L-3775"><span class="linenos">3775</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="L-3776"><a href="#L-3776"><span class="linenos">3776</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">(</span><span class="n">type_required</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-3777"><a href="#L-3777"><span class="linenos">3777</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3778"><a href="#L-3778"><span class="linenos">3778</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="L-3779"><a href="#L-3779"><span class="linenos">3779</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="L-3780"><a href="#L-3780"><span class="linenos">3780</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="L-3781"><a href="#L-3781"><span class="linenos">3781</span></a> <span class="p">)</span>
+</span><span id="L-3782"><a href="#L-3782"><span class="linenos">3782</span></a> <span class="p">)</span>
+</span><span id="L-3783"><a href="#L-3783"><span class="linenos">3783</span></a>
+</span><span id="L-3784"><a href="#L-3784"><span class="linenos">3784</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
+</span><span id="L-3785"><a href="#L-3785"><span class="linenos">3785</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting &gt;&quot;</span><span class="p">)</span>
+</span><span id="L-3786"><a href="#L-3786"><span class="linenos">3786</span></a>
+</span><span id="L-3787"><a href="#L-3787"><span class="linenos">3787</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)):</span>
+</span><span id="L-3788"><a href="#L-3788"><span class="linenos">3788</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="L-3789"><a href="#L-3789"><span class="linenos">3789</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">))</span>
</span><span id="L-3790"><a href="#L-3790"><span class="linenos">3790</span></a>
-</span><span id="L-3791"><a href="#L-3791"><span class="linenos">3791</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
-</span><span id="L-3792"><a href="#L-3792"><span class="linenos">3792</span></a> <span class="n">span</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntervalSpan</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">())]</span>
-</span><span id="L-3793"><a href="#L-3793"><span class="linenos">3793</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3794"><a href="#L-3794"><span class="linenos">3794</span></a> <span class="n">span</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-3795"><a href="#L-3795"><span class="linenos">3795</span></a>
-</span><span id="L-3796"><a href="#L-3796"><span class="linenos">3796</span></a> <span class="k">if</span> <span class="n">span</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="L-3797"><a href="#L-3797"><span class="linenos">3797</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3798"><a href="#L-3798"><span class="linenos">3798</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">span</span>
-</span><span id="L-3799"><a href="#L-3799"><span class="linenos">3799</span></a> <span class="p">)</span>
-</span><span id="L-3800"><a href="#L-3800"><span class="linenos">3800</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3801"><a href="#L-3801"><span class="linenos">3801</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">))</span>
-</span><span id="L-3802"><a href="#L-3802"><span class="linenos">3802</span></a>
-</span><span id="L-3803"><a href="#L-3803"><span class="linenos">3803</span></a> <span class="k">if</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">check_func</span><span class="p">:</span>
-</span><span id="L-3804"><a href="#L-3804"><span class="linenos">3804</span></a> <span class="n">index2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3805"><a href="#L-3805"><span class="linenos">3805</span></a> <span class="n">peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-3806"><a href="#L-3806"><span class="linenos">3806</span></a>
-</span><span id="L-3807"><a href="#L-3807"><span class="linenos">3807</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">peek</span><span class="p">:</span>
-</span><span id="L-3808"><a href="#L-3808"><span class="linenos">3808</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-3809"><a href="#L-3809"><span class="linenos">3809</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3810"><a href="#L-3810"><span class="linenos">3810</span></a>
-</span><span id="L-3811"><a href="#L-3811"><span class="linenos">3811</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index2</span><span class="p">)</span>
+</span><span id="L-3791"><a href="#L-3791"><span class="linenos">3791</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMESTAMPS</span><span class="p">:</span>
+</span><span id="L-3792"><a href="#L-3792"><span class="linenos">3792</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="L-3793"><a href="#L-3793"><span class="linenos">3793</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3794"><a href="#L-3794"><span class="linenos">3794</span></a> <span class="n">tz_type</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-3795"><a href="#L-3795"><span class="linenos">3795</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span>
+</span><span id="L-3796"><a href="#L-3796"><span class="linenos">3796</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMES</span>
+</span><span id="L-3797"><a href="#L-3797"><span class="linenos">3797</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span>
+</span><span id="L-3798"><a href="#L-3798"><span class="linenos">3798</span></a> <span class="p">)</span>
+</span><span id="L-3799"><a href="#L-3799"><span class="linenos">3799</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">tz_type</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-3800"><a href="#L-3800"><span class="linenos">3800</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="L-3801"><a href="#L-3801"><span class="linenos">3801</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3802"><a href="#L-3802"><span class="linenos">3802</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-3803"><a href="#L-3803"><span class="linenos">3803</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="L-3804"><a href="#L-3804"><span class="linenos">3804</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3805"><a href="#L-3805"><span class="linenos">3805</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
+</span><span id="L-3806"><a href="#L-3806"><span class="linenos">3806</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="L-3807"><a href="#L-3807"><span class="linenos">3807</span></a>
+</span><span id="L-3808"><a href="#L-3808"><span class="linenos">3808</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
+</span><span id="L-3809"><a href="#L-3809"><span class="linenos">3809</span></a> <span class="n">span</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntervalSpan</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">())]</span>
+</span><span id="L-3810"><a href="#L-3810"><span class="linenos">3810</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3811"><a href="#L-3811"><span class="linenos">3811</span></a> <span class="n">span</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-3812"><a href="#L-3812"><span class="linenos">3812</span></a>
-</span><span id="L-3813"><a href="#L-3813"><span class="linenos">3813</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-3814"><a href="#L-3814"><span class="linenos">3814</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNSIGNED&quot;</span><span class="p">):</span>
-</span><span id="L-3815"><a href="#L-3815"><span class="linenos">3815</span></a> <span class="n">unsigned_type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SIGNED_TO_UNSIGNED_TYPE_TOKEN</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_token</span><span class="p">)</span>
-</span><span id="L-3816"><a href="#L-3816"><span class="linenos">3816</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unsigned_type_token</span><span class="p">:</span>
-</span><span id="L-3817"><a href="#L-3817"><span class="linenos">3817</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot convert </span><span class="si">{</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2"> to unsigned.&quot;</span><span class="p">)</span>
-</span><span id="L-3818"><a href="#L-3818"><span class="linenos">3818</span></a>
-</span><span id="L-3819"><a href="#L-3819"><span class="linenos">3819</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="n">unsigned_type_token</span> <span class="ow">or</span> <span class="n">type_token</span>
-</span><span id="L-3820"><a href="#L-3820"><span class="linenos">3820</span></a>
-</span><span id="L-3821"><a href="#L-3821"><span class="linenos">3821</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
-</span><span id="L-3822"><a href="#L-3822"><span class="linenos">3822</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
-</span><span id="L-3823"><a href="#L-3823"><span class="linenos">3823</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-3824"><a href="#L-3824"><span class="linenos">3824</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
-</span><span id="L-3825"><a href="#L-3825"><span class="linenos">3825</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
-</span><span id="L-3826"><a href="#L-3826"><span class="linenos">3826</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
-</span><span id="L-3827"><a href="#L-3827"><span class="linenos">3827</span></a> <span class="p">)</span>
-</span><span id="L-3828"><a href="#L-3828"><span class="linenos">3828</span></a>
-</span><span id="L-3829"><a href="#L-3829"><span class="linenos">3829</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">):</span>
-</span><span id="L-3830"><a href="#L-3830"><span class="linenos">3830</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-3831"><a href="#L-3831"><span class="linenos">3831</span></a>
-</span><span id="L-3832"><a href="#L-3832"><span class="linenos">3832</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3833"><a href="#L-3833"><span class="linenos">3833</span></a>
-</span><span id="L-3834"><a href="#L-3834"><span class="linenos">3834</span></a> <span class="k">def</span> <span class="nf">_parse_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_required</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3835"><a href="#L-3835"><span class="linenos">3835</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-3836"><a href="#L-3836"><span class="linenos">3836</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">(</span><span class="n">parse_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-3837"><a href="#L-3837"><span class="linenos">3837</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span>
-</span><span id="L-3838"><a href="#L-3838"><span class="linenos">3838</span></a> <span class="n">column_def</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3839"><a href="#L-3839"><span class="linenos">3839</span></a>
-</span><span id="L-3840"><a href="#L-3840"><span class="linenos">3840</span></a> <span class="k">if</span> <span class="n">type_required</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="L-3841"><a href="#L-3841"><span class="linenos">3841</span></a> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span>
-</span><span id="L-3842"><a href="#L-3842"><span class="linenos">3842</span></a> <span class="p">):</span>
-</span><span id="L-3843"><a href="#L-3843"><span class="linenos">3843</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-3844"><a href="#L-3844"><span class="linenos">3844</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="L-3813"><a href="#L-3813"><span class="linenos">3813</span></a> <span class="k">if</span> <span class="n">span</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="L-3814"><a href="#L-3814"><span class="linenos">3814</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3815"><a href="#L-3815"><span class="linenos">3815</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">span</span>
+</span><span id="L-3816"><a href="#L-3816"><span class="linenos">3816</span></a> <span class="p">)</span>
+</span><span id="L-3817"><a href="#L-3817"><span class="linenos">3817</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3818"><a href="#L-3818"><span class="linenos">3818</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">))</span>
+</span><span id="L-3819"><a href="#L-3819"><span class="linenos">3819</span></a>
+</span><span id="L-3820"><a href="#L-3820"><span class="linenos">3820</span></a> <span class="k">if</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">check_func</span><span class="p">:</span>
+</span><span id="L-3821"><a href="#L-3821"><span class="linenos">3821</span></a> <span class="n">index2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-3822"><a href="#L-3822"><span class="linenos">3822</span></a> <span class="n">peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-3823"><a href="#L-3823"><span class="linenos">3823</span></a>
+</span><span id="L-3824"><a href="#L-3824"><span class="linenos">3824</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">peek</span><span class="p">:</span>
+</span><span id="L-3825"><a href="#L-3825"><span class="linenos">3825</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3826"><a href="#L-3826"><span class="linenos">3826</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3827"><a href="#L-3827"><span class="linenos">3827</span></a>
+</span><span id="L-3828"><a href="#L-3828"><span class="linenos">3828</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index2</span><span class="p">)</span>
+</span><span id="L-3829"><a href="#L-3829"><span class="linenos">3829</span></a>
+</span><span id="L-3830"><a href="#L-3830"><span class="linenos">3830</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-3831"><a href="#L-3831"><span class="linenos">3831</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNSIGNED&quot;</span><span class="p">):</span>
+</span><span id="L-3832"><a href="#L-3832"><span class="linenos">3832</span></a> <span class="n">unsigned_type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SIGNED_TO_UNSIGNED_TYPE_TOKEN</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_token</span><span class="p">)</span>
+</span><span id="L-3833"><a href="#L-3833"><span class="linenos">3833</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unsigned_type_token</span><span class="p">:</span>
+</span><span id="L-3834"><a href="#L-3834"><span class="linenos">3834</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot convert </span><span class="si">{</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2"> to unsigned.&quot;</span><span class="p">)</span>
+</span><span id="L-3835"><a href="#L-3835"><span class="linenos">3835</span></a>
+</span><span id="L-3836"><a href="#L-3836"><span class="linenos">3836</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="n">unsigned_type_token</span> <span class="ow">or</span> <span class="n">type_token</span>
+</span><span id="L-3837"><a href="#L-3837"><span class="linenos">3837</span></a>
+</span><span id="L-3838"><a href="#L-3838"><span class="linenos">3838</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
+</span><span id="L-3839"><a href="#L-3839"><span class="linenos">3839</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
+</span><span id="L-3840"><a href="#L-3840"><span class="linenos">3840</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-3841"><a href="#L-3841"><span class="linenos">3841</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
+</span><span id="L-3842"><a href="#L-3842"><span class="linenos">3842</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
+</span><span id="L-3843"><a href="#L-3843"><span class="linenos">3843</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
+</span><span id="L-3844"><a href="#L-3844"><span class="linenos">3844</span></a> <span class="p">)</span>
</span><span id="L-3845"><a href="#L-3845"><span class="linenos">3845</span></a>
-</span><span id="L-3846"><a href="#L-3846"><span class="linenos">3846</span></a> <span class="k">return</span> <span class="n">column_def</span>
-</span><span id="L-3847"><a href="#L-3847"><span class="linenos">3847</span></a>
-</span><span id="L-3848"><a href="#L-3848"><span class="linenos">3848</span></a> <span class="k">def</span> <span class="nf">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3849"><a href="#L-3849"><span class="linenos">3849</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="L-3850"><a href="#L-3850"><span class="linenos">3850</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3851"><a href="#L-3851"><span class="linenos">3851</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">zone</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">())</span>
-</span><span id="L-3852"><a href="#L-3852"><span class="linenos">3852</span></a>
-</span><span id="L-3853"><a href="#L-3853"><span class="linenos">3853</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3854"><a href="#L-3854"><span class="linenos">3854</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="L-3855"><a href="#L-3855"><span class="linenos">3855</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="L-3856"><a href="#L-3856"><span class="linenos">3856</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3857"><a href="#L-3857"><span class="linenos">3857</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-3858"><a href="#L-3858"><span class="linenos">3858</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3859"><a href="#L-3859"><span class="linenos">3859</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3860"><a href="#L-3860"><span class="linenos">3860</span></a>
-</span><span id="L-3861"><a href="#L-3861"><span class="linenos">3861</span></a> <span class="k">def</span> <span class="nf">_parse_column_ops</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3862"><a href="#L-3862"><span class="linenos">3862</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3863"><a href="#L-3863"><span class="linenos">3863</span></a>
-</span><span id="L-3864"><a href="#L-3864"><span class="linenos">3864</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="p">):</span>
-</span><span id="L-3865"><a href="#L-3865"><span class="linenos">3865</span></a> <span class="n">op_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
-</span><span id="L-3866"><a href="#L-3866"><span class="linenos">3866</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">op_token</span><span class="p">)</span>
-</span><span id="L-3867"><a href="#L-3867"><span class="linenos">3867</span></a>
-</span><span id="L-3868"><a href="#L-3868"><span class="linenos">3868</span></a> <span class="k">if</span> <span class="n">op_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">:</span>
-</span><span id="L-3869"><a href="#L-3869"><span class="linenos">3869</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
-</span><span id="L-3870"><a href="#L-3870"><span class="linenos">3870</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">field</span><span class="p">:</span>
-</span><span id="L-3871"><a href="#L-3871"><span class="linenos">3871</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected type&quot;</span><span class="p">)</span>
-</span><span id="L-3872"><a href="#L-3872"><span class="linenos">3872</span></a> <span class="k">elif</span> <span class="n">op</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-3873"><a href="#L-3873"><span class="linenos">3873</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-3874"><a href="#L-3874"><span class="linenos">3874</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-3875"><a href="#L-3875"><span class="linenos">3875</span></a> <span class="n">field</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-3876"><a href="#L-3876"><span class="linenos">3876</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="L-3877"><a href="#L-3877"><span class="linenos">3877</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span>
-</span><span id="L-3878"><a href="#L-3878"><span class="linenos">3878</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="L-3879"><a href="#L-3879"><span class="linenos">3879</span></a> <span class="p">)</span>
-</span><span id="L-3880"><a href="#L-3880"><span class="linenos">3880</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3881"><a href="#L-3881"><span class="linenos">3881</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">anonymous_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3846"><a href="#L-3846"><span class="linenos">3846</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">):</span>
+</span><span id="L-3847"><a href="#L-3847"><span class="linenos">3847</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3848"><a href="#L-3848"><span class="linenos">3848</span></a>
+</span><span id="L-3849"><a href="#L-3849"><span class="linenos">3849</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3850"><a href="#L-3850"><span class="linenos">3850</span></a>
+</span><span id="L-3851"><a href="#L-3851"><span class="linenos">3851</span></a> <span class="k">def</span> <span class="nf">_parse_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_required</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3852"><a href="#L-3852"><span class="linenos">3852</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-3853"><a href="#L-3853"><span class="linenos">3853</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">(</span><span class="n">parse_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-3854"><a href="#L-3854"><span class="linenos">3854</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span>
+</span><span id="L-3855"><a href="#L-3855"><span class="linenos">3855</span></a> <span class="n">column_def</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3856"><a href="#L-3856"><span class="linenos">3856</span></a>
+</span><span id="L-3857"><a href="#L-3857"><span class="linenos">3857</span></a> <span class="k">if</span> <span class="n">type_required</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="L-3858"><a href="#L-3858"><span class="linenos">3858</span></a> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span>
+</span><span id="L-3859"><a href="#L-3859"><span class="linenos">3859</span></a> <span class="p">):</span>
+</span><span id="L-3860"><a href="#L-3860"><span class="linenos">3860</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-3861"><a href="#L-3861"><span class="linenos">3861</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="L-3862"><a href="#L-3862"><span class="linenos">3862</span></a>
+</span><span id="L-3863"><a href="#L-3863"><span class="linenos">3863</span></a> <span class="k">return</span> <span class="n">column_def</span>
+</span><span id="L-3864"><a href="#L-3864"><span class="linenos">3864</span></a>
+</span><span id="L-3865"><a href="#L-3865"><span class="linenos">3865</span></a> <span class="k">def</span> <span class="nf">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3866"><a href="#L-3866"><span class="linenos">3866</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="L-3867"><a href="#L-3867"><span class="linenos">3867</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3868"><a href="#L-3868"><span class="linenos">3868</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">zone</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">())</span>
+</span><span id="L-3869"><a href="#L-3869"><span class="linenos">3869</span></a>
+</span><span id="L-3870"><a href="#L-3870"><span class="linenos">3870</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3871"><a href="#L-3871"><span class="linenos">3871</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">()</span>
+</span><span id="L-3872"><a href="#L-3872"><span class="linenos">3872</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3873"><a href="#L-3873"><span class="linenos">3873</span></a>
+</span><span id="L-3874"><a href="#L-3874"><span class="linenos">3874</span></a> <span class="k">def</span> <span class="nf">_parse_column_reference</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3875"><a href="#L-3875"><span class="linenos">3875</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="L-3876"><a href="#L-3876"><span class="linenos">3876</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="L-3877"><a href="#L-3877"><span class="linenos">3877</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3878"><a href="#L-3878"><span class="linenos">3878</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3879"><a href="#L-3879"><span class="linenos">3879</span></a>
+</span><span id="L-3880"><a href="#L-3880"><span class="linenos">3880</span></a> <span class="k">def</span> <span class="nf">_parse_column_ops</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3881"><a href="#L-3881"><span class="linenos">3881</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-3882"><a href="#L-3882"><span class="linenos">3882</span></a>
-</span><span id="L-3883"><a href="#L-3883"><span class="linenos">3883</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="L-3884"><a href="#L-3884"><span class="linenos">3884</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
-</span><span id="L-3885"><a href="#L-3885"><span class="linenos">3885</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
-</span><span id="L-3886"><a href="#L-3886"><span class="linenos">3886</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
-</span><span id="L-3887"><a href="#L-3887"><span class="linenos">3887</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3888"><a href="#L-3888"><span class="linenos">3888</span></a>
-</span><span id="L-3889"><a href="#L-3889"><span class="linenos">3889</span></a> <span class="k">if</span> <span class="n">op</span><span class="p">:</span>
-</span><span id="L-3890"><a href="#L-3890"><span class="linenos">3890</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">field</span><span class="p">)</span>
-</span><span id="L-3891"><a href="#L-3891"><span class="linenos">3891</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">):</span>
-</span><span id="L-3892"><a href="#L-3892"><span class="linenos">3892</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-3893"><a href="#L-3893"><span class="linenos">3893</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
-</span><span id="L-3894"><a href="#L-3894"><span class="linenos">3894</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
-</span><span id="L-3895"><a href="#L-3895"><span class="linenos">3895</span></a> <span class="n">table</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-3896"><a href="#L-3896"><span class="linenos">3896</span></a> <span class="n">db</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">),</span>
-</span><span id="L-3897"><a href="#L-3897"><span class="linenos">3897</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">),</span>
-</span><span id="L-3898"><a href="#L-3898"><span class="linenos">3898</span></a> <span class="p">)</span>
-</span><span id="L-3899"><a href="#L-3899"><span class="linenos">3899</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3900"><a href="#L-3900"><span class="linenos">3900</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">field</span><span class="p">)</span>
-</span><span id="L-3901"><a href="#L-3901"><span class="linenos">3901</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3902"><a href="#L-3902"><span class="linenos">3902</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3903"><a href="#L-3903"><span class="linenos">3903</span></a>
-</span><span id="L-3904"><a href="#L-3904"><span class="linenos">3904</span></a> <span class="k">def</span> <span class="nf">_parse_primary</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3905"><a href="#L-3905"><span class="linenos">3905</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">):</span>
-</span><span id="L-3906"><a href="#L-3906"><span class="linenos">3906</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
-</span><span id="L-3907"><a href="#L-3907"><span class="linenos">3907</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-3908"><a href="#L-3908"><span class="linenos">3908</span></a>
-</span><span id="L-3909"><a href="#L-3909"><span class="linenos">3909</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span>
-</span><span id="L-3910"><a href="#L-3910"><span class="linenos">3910</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">primary</span><span class="p">]</span>
-</span><span id="L-3911"><a href="#L-3911"><span class="linenos">3911</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">):</span>
-</span><span id="L-3912"><a href="#L-3912"><span class="linenos">3912</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
-</span><span id="L-3913"><a href="#L-3913"><span class="linenos">3913</span></a>
-</span><span id="L-3914"><a href="#L-3914"><span class="linenos">3914</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-3915"><a href="#L-3915"><span class="linenos">3915</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-3883"><a href="#L-3883"><span class="linenos">3883</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="p">):</span>
+</span><span id="L-3884"><a href="#L-3884"><span class="linenos">3884</span></a> <span class="n">op_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="L-3885"><a href="#L-3885"><span class="linenos">3885</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">op_token</span><span class="p">)</span>
+</span><span id="L-3886"><a href="#L-3886"><span class="linenos">3886</span></a>
+</span><span id="L-3887"><a href="#L-3887"><span class="linenos">3887</span></a> <span class="k">if</span> <span class="n">op_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">:</span>
+</span><span id="L-3888"><a href="#L-3888"><span class="linenos">3888</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="L-3889"><a href="#L-3889"><span class="linenos">3889</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">field</span><span class="p">:</span>
+</span><span id="L-3890"><a href="#L-3890"><span class="linenos">3890</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected type&quot;</span><span class="p">)</span>
+</span><span id="L-3891"><a href="#L-3891"><span class="linenos">3891</span></a> <span class="k">elif</span> <span class="n">op</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-3892"><a href="#L-3892"><span class="linenos">3892</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">()</span>
+</span><span id="L-3893"><a href="#L-3893"><span class="linenos">3893</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3894"><a href="#L-3894"><span class="linenos">3894</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">anonymous_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-3895"><a href="#L-3895"><span class="linenos">3895</span></a>
+</span><span id="L-3896"><a href="#L-3896"><span class="linenos">3896</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="L-3897"><a href="#L-3897"><span class="linenos">3897</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
+</span><span id="L-3898"><a href="#L-3898"><span class="linenos">3898</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
+</span><span id="L-3899"><a href="#L-3899"><span class="linenos">3899</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
+</span><span id="L-3900"><a href="#L-3900"><span class="linenos">3900</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3901"><a href="#L-3901"><span class="linenos">3901</span></a>
+</span><span id="L-3902"><a href="#L-3902"><span class="linenos">3902</span></a> <span class="k">if</span> <span class="n">op</span><span class="p">:</span>
+</span><span id="L-3903"><a href="#L-3903"><span class="linenos">3903</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">field</span><span class="p">)</span>
+</span><span id="L-3904"><a href="#L-3904"><span class="linenos">3904</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">):</span>
+</span><span id="L-3905"><a href="#L-3905"><span class="linenos">3905</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-3906"><a href="#L-3906"><span class="linenos">3906</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
+</span><span id="L-3907"><a href="#L-3907"><span class="linenos">3907</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
+</span><span id="L-3908"><a href="#L-3908"><span class="linenos">3908</span></a> <span class="n">table</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-3909"><a href="#L-3909"><span class="linenos">3909</span></a> <span class="n">db</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">),</span>
+</span><span id="L-3910"><a href="#L-3910"><span class="linenos">3910</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">),</span>
+</span><span id="L-3911"><a href="#L-3911"><span class="linenos">3911</span></a> <span class="p">)</span>
+</span><span id="L-3912"><a href="#L-3912"><span class="linenos">3912</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3913"><a href="#L-3913"><span class="linenos">3913</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">field</span><span class="p">)</span>
+</span><span id="L-3914"><a href="#L-3914"><span class="linenos">3914</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3915"><a href="#L-3915"><span class="linenos">3915</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-3916"><a href="#L-3916"><span class="linenos">3916</span></a>
-</span><span id="L-3917"><a href="#L-3917"><span class="linenos">3917</span></a> <span class="k">return</span> <span class="n">primary</span>
-</span><span id="L-3918"><a href="#L-3918"><span class="linenos">3918</span></a>
-</span><span id="L-3919"><a href="#L-3919"><span class="linenos">3919</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">):</span>
-</span><span id="L-3920"><a href="#L-3920"><span class="linenos">3920</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;0.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-3917"><a href="#L-3917"><span class="linenos">3917</span></a> <span class="k">def</span> <span class="nf">_parse_primary</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3918"><a href="#L-3918"><span class="linenos">3918</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">):</span>
+</span><span id="L-3919"><a href="#L-3919"><span class="linenos">3919</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="L-3920"><a href="#L-3920"><span class="linenos">3920</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-3921"><a href="#L-3921"><span class="linenos">3921</span></a>
-</span><span id="L-3922"><a href="#L-3922"><span class="linenos">3922</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-3923"><a href="#L-3923"><span class="linenos">3923</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="L-3924"><a href="#L-3924"><span class="linenos">3924</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
-</span><span id="L-3925"><a href="#L-3925"><span class="linenos">3925</span></a>
-</span><span id="L-3926"><a href="#L-3926"><span class="linenos">3926</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
-</span><span id="L-3927"><a href="#L-3927"><span class="linenos">3927</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">query</span><span class="p">]</span>
-</span><span id="L-3928"><a href="#L-3928"><span class="linenos">3928</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3929"><a href="#L-3929"><span class="linenos">3929</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
-</span><span id="L-3930"><a href="#L-3930"><span class="linenos">3930</span></a>
-</span><span id="L-3931"><a href="#L-3931"><span class="linenos">3931</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="L-3932"><a href="#L-3932"><span class="linenos">3932</span></a>
-</span><span id="L-3933"><a href="#L-3933"><span class="linenos">3933</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
-</span><span id="L-3934"><a href="#L-3934"><span class="linenos">3934</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
-</span><span id="L-3935"><a href="#L-3935"><span class="linenos">3935</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_subquery</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">parse_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-3936"><a href="#L-3936"><span class="linenos">3936</span></a> <span class="p">)</span>
-</span><span id="L-3937"><a href="#L-3937"><span class="linenos">3937</span></a> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="L-3938"><a href="#L-3938"><span class="linenos">3938</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-3939"><a href="#L-3939"><span class="linenos">3939</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-3940"><a href="#L-3940"><span class="linenos">3940</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
-</span><span id="L-3941"><a href="#L-3941"><span class="linenos">3941</span></a>
-</span><span id="L-3942"><a href="#L-3942"><span class="linenos">3942</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-3943"><a href="#L-3943"><span class="linenos">3943</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
-</span><span id="L-3944"><a href="#L-3944"><span class="linenos">3944</span></a>
-</span><span id="L-3945"><a href="#L-3945"><span class="linenos">3945</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-3946"><a href="#L-3946"><span class="linenos">3946</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-3947"><a href="#L-3947"><span class="linenos">3947</span></a>
-</span><span id="L-3948"><a href="#L-3948"><span class="linenos">3948</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3949"><a href="#L-3949"><span class="linenos">3949</span></a>
-</span><span id="L-3950"><a href="#L-3950"><span class="linenos">3950</span></a> <span class="k">def</span> <span class="nf">_parse_field</span><span class="p">(</span>
-</span><span id="L-3951"><a href="#L-3951"><span class="linenos">3951</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3952"><a href="#L-3952"><span class="linenos">3952</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3953"><a href="#L-3953"><span class="linenos">3953</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-3954"><a href="#L-3954"><span class="linenos">3954</span></a> <span class="n">anonymous_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3955"><a href="#L-3955"><span class="linenos">3955</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3956"><a href="#L-3956"><span class="linenos">3956</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-3957"><a href="#L-3957"><span class="linenos">3957</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-3958"><a href="#L-3958"><span class="linenos">3958</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">)</span>
-</span><span id="L-3959"><a href="#L-3959"><span class="linenos">3959</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="n">any_token</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="n">tokens</span><span class="p">)</span>
-</span><span id="L-3960"><a href="#L-3960"><span class="linenos">3960</span></a> <span class="p">)</span>
-</span><span id="L-3961"><a href="#L-3961"><span class="linenos">3961</span></a>
-</span><span id="L-3962"><a href="#L-3962"><span class="linenos">3962</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
-</span><span id="L-3963"><a href="#L-3963"><span class="linenos">3963</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3964"><a href="#L-3964"><span class="linenos">3964</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-3965"><a href="#L-3965"><span class="linenos">3965</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3966"><a href="#L-3966"><span class="linenos">3966</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-3967"><a href="#L-3967"><span class="linenos">3967</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3968"><a href="#L-3968"><span class="linenos">3968</span></a> <span class="c1"># This allows us to also parse {fn &lt;function&gt;} syntax (Snowflake, MySQL support this)</span>
-</span><span id="L-3969"><a href="#L-3969"><span class="linenos">3969</span></a> <span class="c1"># See: https://community.snowflake.com/s/article/SQL-Escape-Sequences</span>
-</span><span id="L-3970"><a href="#L-3970"><span class="linenos">3970</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-3971"><a href="#L-3971"><span class="linenos">3971</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-3972"><a href="#L-3972"><span class="linenos">3972</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-3973"><a href="#L-3973"><span class="linenos">3973</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span>
-</span><span id="L-3974"><a href="#L-3974"><span class="linenos">3974</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;FN&quot;</span>
-</span><span id="L-3975"><a href="#L-3975"><span class="linenos">3975</span></a> <span class="p">):</span>
-</span><span id="L-3976"><a href="#L-3976"><span class="linenos">3976</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="L-3977"><a href="#L-3977"><span class="linenos">3977</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-3978"><a href="#L-3978"><span class="linenos">3978</span></a>
-</span><span id="L-3979"><a href="#L-3979"><span class="linenos">3979</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_call</span><span class="p">(</span>
-</span><span id="L-3980"><a href="#L-3980"><span class="linenos">3980</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
-</span><span id="L-3981"><a href="#L-3981"><span class="linenos">3981</span></a> <span class="p">)</span>
-</span><span id="L-3982"><a href="#L-3982"><span class="linenos">3982</span></a>
-</span><span id="L-3983"><a href="#L-3983"><span class="linenos">3983</span></a> <span class="k">if</span> <span class="n">fn_syntax</span><span class="p">:</span>
-</span><span id="L-3984"><a href="#L-3984"><span class="linenos">3984</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">)</span>
-</span><span id="L-3985"><a href="#L-3985"><span class="linenos">3985</span></a>
-</span><span id="L-3986"><a href="#L-3986"><span class="linenos">3986</span></a> <span class="k">return</span> <span class="n">func</span>
-</span><span id="L-3987"><a href="#L-3987"><span class="linenos">3987</span></a>
-</span><span id="L-3988"><a href="#L-3988"><span class="linenos">3988</span></a> <span class="k">def</span> <span class="nf">_parse_function_call</span><span class="p">(</span>
-</span><span id="L-3989"><a href="#L-3989"><span class="linenos">3989</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-3990"><a href="#L-3990"><span class="linenos">3990</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-3991"><a href="#L-3991"><span class="linenos">3991</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-3992"><a href="#L-3992"><span class="linenos">3992</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-3993"><a href="#L-3993"><span class="linenos">3993</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-3994"><a href="#L-3994"><span class="linenos">3994</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-3995"><a href="#L-3995"><span class="linenos">3995</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-3996"><a href="#L-3996"><span class="linenos">3996</span></a>
-</span><span id="L-3997"><a href="#L-3997"><span class="linenos">3997</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="L-3998"><a href="#L-3998"><span class="linenos">3998</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span>
-</span><span id="L-3999"><a href="#L-3999"><span class="linenos">3999</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-4000"><a href="#L-4000"><span class="linenos">4000</span></a> <span class="n">upper</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-4001"><a href="#L-4001"><span class="linenos">4001</span></a>
-</span><span id="L-4002"><a href="#L-4002"><span class="linenos">4002</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
-</span><span id="L-4003"><a href="#L-4003"><span class="linenos">4003</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">parser</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVALID_FUNC_NAME_TOKENS</span><span class="p">:</span>
-</span><span id="L-4004"><a href="#L-4004"><span class="linenos">4004</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4005"><a href="#L-4005"><span class="linenos">4005</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="L-4006"><a href="#L-4006"><span class="linenos">4006</span></a>
-</span><span id="L-4007"><a href="#L-4007"><span class="linenos">4007</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
-</span><span id="L-4008"><a href="#L-4008"><span class="linenos">4008</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">:</span>
-</span><span id="L-4009"><a href="#L-4009"><span class="linenos">4009</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4010"><a href="#L-4010"><span class="linenos">4010</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">[</span><span class="n">token_type</span><span class="p">])</span>
-</span><span id="L-4011"><a href="#L-4011"><span class="linenos">4011</span></a>
-</span><span id="L-4012"><a href="#L-4012"><span class="linenos">4012</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4013"><a href="#L-4013"><span class="linenos">4013</span></a>
-</span><span id="L-4014"><a href="#L-4014"><span class="linenos">4014</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNC_TOKENS</span><span class="p">:</span>
-</span><span id="L-4015"><a href="#L-4015"><span class="linenos">4015</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4016"><a href="#L-4016"><span class="linenos">4016</span></a>
-</span><span id="L-4017"><a href="#L-4017"><span class="linenos">4017</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="L-4018"><a href="#L-4018"><span class="linenos">4018</span></a>
-</span><span id="L-4019"><a href="#L-4019"><span class="linenos">4019</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
-</span><span id="L-4020"><a href="#L-4020"><span class="linenos">4020</span></a> <span class="k">if</span> <span class="n">parser</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
-</span><span id="L-4021"><a href="#L-4021"><span class="linenos">4021</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="L-4022"><a href="#L-4022"><span class="linenos">4022</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4023"><a href="#L-4023"><span class="linenos">4023</span></a> <span class="n">subquery_predicate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUBQUERY_PREDICATES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">)</span>
+</span><span id="L-3922"><a href="#L-3922"><span class="linenos">3922</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span>
+</span><span id="L-3923"><a href="#L-3923"><span class="linenos">3923</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">primary</span><span class="p">]</span>
+</span><span id="L-3924"><a href="#L-3924"><span class="linenos">3924</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">):</span>
+</span><span id="L-3925"><a href="#L-3925"><span class="linenos">3925</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+</span><span id="L-3926"><a href="#L-3926"><span class="linenos">3926</span></a>
+</span><span id="L-3927"><a href="#L-3927"><span class="linenos">3927</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-3928"><a href="#L-3928"><span class="linenos">3928</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-3929"><a href="#L-3929"><span class="linenos">3929</span></a>
+</span><span id="L-3930"><a href="#L-3930"><span class="linenos">3930</span></a> <span class="k">return</span> <span class="n">primary</span>
+</span><span id="L-3931"><a href="#L-3931"><span class="linenos">3931</span></a>
+</span><span id="L-3932"><a href="#L-3932"><span class="linenos">3932</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">):</span>
+</span><span id="L-3933"><a href="#L-3933"><span class="linenos">3933</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;0.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-3934"><a href="#L-3934"><span class="linenos">3934</span></a>
+</span><span id="L-3935"><a href="#L-3935"><span class="linenos">3935</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-3936"><a href="#L-3936"><span class="linenos">3936</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
+</span><span id="L-3937"><a href="#L-3937"><span class="linenos">3937</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
+</span><span id="L-3938"><a href="#L-3938"><span class="linenos">3938</span></a>
+</span><span id="L-3939"><a href="#L-3939"><span class="linenos">3939</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="L-3940"><a href="#L-3940"><span class="linenos">3940</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">query</span><span class="p">]</span>
+</span><span id="L-3941"><a href="#L-3941"><span class="linenos">3941</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3942"><a href="#L-3942"><span class="linenos">3942</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
+</span><span id="L-3943"><a href="#L-3943"><span class="linenos">3943</span></a>
+</span><span id="L-3944"><a href="#L-3944"><span class="linenos">3944</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="L-3945"><a href="#L-3945"><span class="linenos">3945</span></a>
+</span><span id="L-3946"><a href="#L-3946"><span class="linenos">3946</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="L-3947"><a href="#L-3947"><span class="linenos">3947</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
+</span><span id="L-3948"><a href="#L-3948"><span class="linenos">3948</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_subquery</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">parse_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3949"><a href="#L-3949"><span class="linenos">3949</span></a> <span class="p">)</span>
+</span><span id="L-3950"><a href="#L-3950"><span class="linenos">3950</span></a> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="L-3951"><a href="#L-3951"><span class="linenos">3951</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-3952"><a href="#L-3952"><span class="linenos">3952</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-3953"><a href="#L-3953"><span class="linenos">3953</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
+</span><span id="L-3954"><a href="#L-3954"><span class="linenos">3954</span></a>
+</span><span id="L-3955"><a href="#L-3955"><span class="linenos">3955</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-3956"><a href="#L-3956"><span class="linenos">3956</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="L-3957"><a href="#L-3957"><span class="linenos">3957</span></a>
+</span><span id="L-3958"><a href="#L-3958"><span class="linenos">3958</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-3959"><a href="#L-3959"><span class="linenos">3959</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-3960"><a href="#L-3960"><span class="linenos">3960</span></a>
+</span><span id="L-3961"><a href="#L-3961"><span class="linenos">3961</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-3962"><a href="#L-3962"><span class="linenos">3962</span></a>
+</span><span id="L-3963"><a href="#L-3963"><span class="linenos">3963</span></a> <span class="k">def</span> <span class="nf">_parse_field</span><span class="p">(</span>
+</span><span id="L-3964"><a href="#L-3964"><span class="linenos">3964</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3965"><a href="#L-3965"><span class="linenos">3965</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3966"><a href="#L-3966"><span class="linenos">3966</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-3967"><a href="#L-3967"><span class="linenos">3967</span></a> <span class="n">anonymous_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3968"><a href="#L-3968"><span class="linenos">3968</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3969"><a href="#L-3969"><span class="linenos">3969</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-3970"><a href="#L-3970"><span class="linenos">3970</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-3971"><a href="#L-3971"><span class="linenos">3971</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">)</span>
+</span><span id="L-3972"><a href="#L-3972"><span class="linenos">3972</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="n">any_token</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="n">tokens</span><span class="p">)</span>
+</span><span id="L-3973"><a href="#L-3973"><span class="linenos">3973</span></a> <span class="p">)</span>
+</span><span id="L-3974"><a href="#L-3974"><span class="linenos">3974</span></a>
+</span><span id="L-3975"><a href="#L-3975"><span class="linenos">3975</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
+</span><span id="L-3976"><a href="#L-3976"><span class="linenos">3976</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-3977"><a href="#L-3977"><span class="linenos">3977</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-3978"><a href="#L-3978"><span class="linenos">3978</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-3979"><a href="#L-3979"><span class="linenos">3979</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-3980"><a href="#L-3980"><span class="linenos">3980</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-3981"><a href="#L-3981"><span class="linenos">3981</span></a> <span class="c1"># This allows us to also parse {fn &lt;function&gt;} syntax (Snowflake, MySQL support this)</span>
+</span><span id="L-3982"><a href="#L-3982"><span class="linenos">3982</span></a> <span class="c1"># See: https://community.snowflake.com/s/article/SQL-Escape-Sequences</span>
+</span><span id="L-3983"><a href="#L-3983"><span class="linenos">3983</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-3984"><a href="#L-3984"><span class="linenos">3984</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-3985"><a href="#L-3985"><span class="linenos">3985</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-3986"><a href="#L-3986"><span class="linenos">3986</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span>
+</span><span id="L-3987"><a href="#L-3987"><span class="linenos">3987</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;FN&quot;</span>
+</span><span id="L-3988"><a href="#L-3988"><span class="linenos">3988</span></a> <span class="p">):</span>
+</span><span id="L-3989"><a href="#L-3989"><span class="linenos">3989</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="L-3990"><a href="#L-3990"><span class="linenos">3990</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-3991"><a href="#L-3991"><span class="linenos">3991</span></a>
+</span><span id="L-3992"><a href="#L-3992"><span class="linenos">3992</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_call</span><span class="p">(</span>
+</span><span id="L-3993"><a href="#L-3993"><span class="linenos">3993</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
+</span><span id="L-3994"><a href="#L-3994"><span class="linenos">3994</span></a> <span class="p">)</span>
+</span><span id="L-3995"><a href="#L-3995"><span class="linenos">3995</span></a>
+</span><span id="L-3996"><a href="#L-3996"><span class="linenos">3996</span></a> <span class="k">if</span> <span class="n">fn_syntax</span><span class="p">:</span>
+</span><span id="L-3997"><a href="#L-3997"><span class="linenos">3997</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">)</span>
+</span><span id="L-3998"><a href="#L-3998"><span class="linenos">3998</span></a>
+</span><span id="L-3999"><a href="#L-3999"><span class="linenos">3999</span></a> <span class="k">return</span> <span class="n">func</span>
+</span><span id="L-4000"><a href="#L-4000"><span class="linenos">4000</span></a>
+</span><span id="L-4001"><a href="#L-4001"><span class="linenos">4001</span></a> <span class="k">def</span> <span class="nf">_parse_function_call</span><span class="p">(</span>
+</span><span id="L-4002"><a href="#L-4002"><span class="linenos">4002</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-4003"><a href="#L-4003"><span class="linenos">4003</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-4004"><a href="#L-4004"><span class="linenos">4004</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4005"><a href="#L-4005"><span class="linenos">4005</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-4006"><a href="#L-4006"><span class="linenos">4006</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4007"><a href="#L-4007"><span class="linenos">4007</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-4008"><a href="#L-4008"><span class="linenos">4008</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4009"><a href="#L-4009"><span class="linenos">4009</span></a>
+</span><span id="L-4010"><a href="#L-4010"><span class="linenos">4010</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="L-4011"><a href="#L-4011"><span class="linenos">4011</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="L-4012"><a href="#L-4012"><span class="linenos">4012</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span>
+</span><span id="L-4013"><a href="#L-4013"><span class="linenos">4013</span></a> <span class="n">upper</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-4014"><a href="#L-4014"><span class="linenos">4014</span></a>
+</span><span id="L-4015"><a href="#L-4015"><span class="linenos">4015</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
+</span><span id="L-4016"><a href="#L-4016"><span class="linenos">4016</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">parser</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVALID_FUNC_NAME_TOKENS</span><span class="p">:</span>
+</span><span id="L-4017"><a href="#L-4017"><span class="linenos">4017</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4018"><a href="#L-4018"><span class="linenos">4018</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-4019"><a href="#L-4019"><span class="linenos">4019</span></a>
+</span><span id="L-4020"><a href="#L-4020"><span class="linenos">4020</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
+</span><span id="L-4021"><a href="#L-4021"><span class="linenos">4021</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">:</span>
+</span><span id="L-4022"><a href="#L-4022"><span class="linenos">4022</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4023"><a href="#L-4023"><span class="linenos">4023</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">[</span><span class="n">token_type</span><span class="p">])</span>
</span><span id="L-4024"><a href="#L-4024"><span class="linenos">4024</span></a>
-</span><span id="L-4025"><a href="#L-4025"><span class="linenos">4025</span></a> <span class="k">if</span> <span class="n">subquery_predicate</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
-</span><span id="L-4026"><a href="#L-4026"><span class="linenos">4026</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">subquery_predicate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">())</span>
-</span><span id="L-4027"><a href="#L-4027"><span class="linenos">4027</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-4028"><a href="#L-4028"><span class="linenos">4028</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4025"><a href="#L-4025"><span class="linenos">4025</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4026"><a href="#L-4026"><span class="linenos">4026</span></a>
+</span><span id="L-4027"><a href="#L-4027"><span class="linenos">4027</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNC_TOKENS</span><span class="p">:</span>
+</span><span id="L-4028"><a href="#L-4028"><span class="linenos">4028</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4029"><a href="#L-4029"><span class="linenos">4029</span></a>
-</span><span id="L-4030"><a href="#L-4030"><span class="linenos">4030</span></a> <span class="k">if</span> <span class="n">functions</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-4031"><a href="#L-4031"><span class="linenos">4031</span></a> <span class="n">functions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS</span>
-</span><span id="L-4032"><a href="#L-4032"><span class="linenos">4032</span></a>
-</span><span id="L-4033"><a href="#L-4033"><span class="linenos">4033</span></a> <span class="n">function</span> <span class="o">=</span> <span class="n">functions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
-</span><span id="L-4034"><a href="#L-4034"><span class="linenos">4034</span></a>
-</span><span id="L-4035"><a href="#L-4035"><span class="linenos">4035</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">upper</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span>
-</span><span id="L-4036"><a href="#L-4036"><span class="linenos">4036</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="L-4030"><a href="#L-4030"><span class="linenos">4030</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="L-4031"><a href="#L-4031"><span class="linenos">4031</span></a>
+</span><span id="L-4032"><a href="#L-4032"><span class="linenos">4032</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
+</span><span id="L-4033"><a href="#L-4033"><span class="linenos">4033</span></a> <span class="k">if</span> <span class="n">parser</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
+</span><span id="L-4034"><a href="#L-4034"><span class="linenos">4034</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-4035"><a href="#L-4035"><span class="linenos">4035</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4036"><a href="#L-4036"><span class="linenos">4036</span></a> <span class="n">subquery_predicate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUBQUERY_PREDICATES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">)</span>
</span><span id="L-4037"><a href="#L-4037"><span class="linenos">4037</span></a>
-</span><span id="L-4038"><a href="#L-4038"><span class="linenos">4038</span></a> <span class="k">if</span> <span class="n">function</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
-</span><span id="L-4039"><a href="#L-4039"><span class="linenos">4039</span></a> <span class="k">if</span> <span class="s2">&quot;dialect&quot;</span> <span class="ow">in</span> <span class="n">function</span><span class="o">.</span><span class="vm">__code__</span><span class="o">.</span><span class="n">co_varnames</span><span class="p">:</span>
-</span><span id="L-4040"><a href="#L-4040"><span class="linenos">4040</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="L-4041"><a href="#L-4041"><span class="linenos">4041</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4042"><a href="#L-4042"><span class="linenos">4042</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-4043"><a href="#L-4043"><span class="linenos">4043</span></a>
-</span><span id="L-4044"><a href="#L-4044"><span class="linenos">4044</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="L-4045"><a href="#L-4045"><span class="linenos">4045</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span>
-</span><span id="L-4046"><a href="#L-4046"><span class="linenos">4046</span></a> <span class="n">func</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
+</span><span id="L-4038"><a href="#L-4038"><span class="linenos">4038</span></a> <span class="k">if</span> <span class="n">subquery_predicate</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
+</span><span id="L-4039"><a href="#L-4039"><span class="linenos">4039</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">subquery_predicate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">())</span>
+</span><span id="L-4040"><a href="#L-4040"><span class="linenos">4040</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-4041"><a href="#L-4041"><span class="linenos">4041</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4042"><a href="#L-4042"><span class="linenos">4042</span></a>
+</span><span id="L-4043"><a href="#L-4043"><span class="linenos">4043</span></a> <span class="k">if</span> <span class="n">functions</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-4044"><a href="#L-4044"><span class="linenos">4044</span></a> <span class="n">functions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS</span>
+</span><span id="L-4045"><a href="#L-4045"><span class="linenos">4045</span></a>
+</span><span id="L-4046"><a href="#L-4046"><span class="linenos">4046</span></a> <span class="n">function</span> <span class="o">=</span> <span class="n">functions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
</span><span id="L-4047"><a href="#L-4047"><span class="linenos">4047</span></a>
-</span><span id="L-4048"><a href="#L-4048"><span class="linenos">4048</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">func</span>
-</span><span id="L-4049"><a href="#L-4049"><span class="linenos">4049</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4050"><a href="#L-4050"><span class="linenos">4050</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-4051"><a href="#L-4051"><span class="linenos">4051</span></a>
-</span><span id="L-4052"><a href="#L-4052"><span class="linenos">4052</span></a> <span 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">Expression</span><span class="p">):</span>
-</span><span id="L-4053"><a href="#L-4053"><span class="linenos">4053</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
-</span><span id="L-4054"><a href="#L-4054"><span class="linenos">4054</span></a>
-</span><span id="L-4055"><a href="#L-4055"><span class="linenos">4055</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4056"><a href="#L-4056"><span class="linenos">4056</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4057"><a href="#L-4057"><span class="linenos">4057</span></a>
-</span><span id="L-4058"><a href="#L-4058"><span class="linenos">4058</span></a> <span class="k">def</span> <span class="nf">_parse_function_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4059"><a href="#L-4059"><span class="linenos">4059</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
+</span><span id="L-4048"><a href="#L-4048"><span class="linenos">4048</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">upper</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span>
+</span><span id="L-4049"><a href="#L-4049"><span class="linenos">4049</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="L-4050"><a href="#L-4050"><span class="linenos">4050</span></a>
+</span><span id="L-4051"><a href="#L-4051"><span class="linenos">4051</span></a> <span class="k">if</span> <span class="n">function</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
+</span><span id="L-4052"><a href="#L-4052"><span class="linenos">4052</span></a> <span class="k">if</span> <span class="s2">&quot;dialect&quot;</span> <span class="ow">in</span> <span class="n">function</span><span class="o">.</span><span class="vm">__code__</span><span class="o">.</span><span class="n">co_varnames</span><span class="p">:</span>
+</span><span id="L-4053"><a href="#L-4053"><span class="linenos">4053</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="L-4054"><a href="#L-4054"><span class="linenos">4054</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4055"><a href="#L-4055"><span class="linenos">4055</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-4056"><a href="#L-4056"><span class="linenos">4056</span></a>
+</span><span id="L-4057"><a href="#L-4057"><span class="linenos">4057</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-4058"><a href="#L-4058"><span class="linenos">4058</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span>
+</span><span id="L-4059"><a href="#L-4059"><span class="linenos">4059</span></a> <span class="n">func</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
</span><span id="L-4060"><a href="#L-4060"><span class="linenos">4060</span></a>
-</span><span id="L-4061"><a href="#L-4061"><span class="linenos">4061</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
-</span><span id="L-4062"><a href="#L-4062"><span class="linenos">4062</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4063"><a href="#L-4063"><span class="linenos">4063</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4064"><a href="#L-4064"><span class="linenos">4064</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-4065"><a href="#L-4065"><span class="linenos">4065</span></a>
-</span><span id="L-4066"><a href="#L-4066"><span class="linenos">4066</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
-</span><span id="L-4067"><a href="#L-4067"><span class="linenos">4067</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
-</span><span id="L-4068"><a href="#L-4068"><span class="linenos">4068</span></a>
-</span><span id="L-4069"><a href="#L-4069"><span class="linenos">4069</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-4070"><a href="#L-4070"><span class="linenos">4070</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4071"><a href="#L-4071"><span class="linenos">4071</span></a>
-</span><span id="L-4072"><a href="#L-4072"><span class="linenos">4072</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_parameter</span><span class="p">)</span>
-</span><span id="L-4073"><a href="#L-4073"><span class="linenos">4073</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-4074"><a href="#L-4074"><span class="linenos">4074</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4075"><a href="#L-4075"><span class="linenos">4075</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wrapped</span><span class="o">=</span><span class="kc">True</span>
-</span><span id="L-4076"><a href="#L-4076"><span class="linenos">4076</span></a> <span class="p">)</span>
-</span><span id="L-4077"><a href="#L-4077"><span class="linenos">4077</span></a>
-</span><span id="L-4078"><a href="#L-4078"><span class="linenos">4078</span></a> <span class="k">def</span> <span class="nf">_parse_introducer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
-</span><span id="L-4079"><a href="#L-4079"><span class="linenos">4079</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-4080"><a href="#L-4080"><span class="linenos">4080</span></a> <span class="k">if</span> <span class="n">literal</span><span class="p">:</span>
-</span><span id="L-4081"><a href="#L-4081"><span class="linenos">4081</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">literal</span><span class="p">)</span>
-</span><span id="L-4082"><a href="#L-4082"><span class="linenos">4082</span></a>
-</span><span id="L-4083"><a href="#L-4083"><span class="linenos">4083</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-4061"><a href="#L-4061"><span class="linenos">4061</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">func</span>
+</span><span id="L-4062"><a href="#L-4062"><span class="linenos">4062</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4063"><a href="#L-4063"><span class="linenos">4063</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-4064"><a href="#L-4064"><span class="linenos">4064</span></a>
+</span><span id="L-4065"><a href="#L-4065"><span class="linenos">4065</span></a> <span 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">Expression</span><span class="p">):</span>
+</span><span id="L-4066"><a href="#L-4066"><span class="linenos">4066</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="L-4067"><a href="#L-4067"><span class="linenos">4067</span></a>
+</span><span id="L-4068"><a href="#L-4068"><span class="linenos">4068</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4069"><a href="#L-4069"><span class="linenos">4069</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4070"><a href="#L-4070"><span class="linenos">4070</span></a>
+</span><span id="L-4071"><a href="#L-4071"><span class="linenos">4071</span></a> <span class="k">def</span> <span class="nf">_parse_function_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4072"><a href="#L-4072"><span class="linenos">4072</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
+</span><span id="L-4073"><a href="#L-4073"><span class="linenos">4073</span></a>
+</span><span id="L-4074"><a href="#L-4074"><span class="linenos">4074</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
+</span><span id="L-4075"><a href="#L-4075"><span class="linenos">4075</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4076"><a href="#L-4076"><span class="linenos">4076</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4077"><a href="#L-4077"><span class="linenos">4077</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-4078"><a href="#L-4078"><span class="linenos">4078</span></a>
+</span><span id="L-4079"><a href="#L-4079"><span class="linenos">4079</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
+</span><span id="L-4080"><a href="#L-4080"><span class="linenos">4080</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
+</span><span id="L-4081"><a href="#L-4081"><span class="linenos">4081</span></a>
+</span><span id="L-4082"><a href="#L-4082"><span class="linenos">4082</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-4083"><a href="#L-4083"><span class="linenos">4083</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4084"><a href="#L-4084"><span class="linenos">4084</span></a>
-</span><span id="L-4085"><a href="#L-4085"><span class="linenos">4085</span></a> <span class="k">def</span> <span class="nf">_parse_session_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</span><span class="p">:</span>
-</span><span id="L-4086"><a href="#L-4086"><span class="linenos">4086</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4087"><a href="#L-4087"><span class="linenos">4087</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-4088"><a href="#L-4088"><span class="linenos">4088</span></a>
-</span><span id="L-4089"><a href="#L-4089"><span class="linenos">4089</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
-</span><span id="L-4090"><a href="#L-4090"><span class="linenos">4090</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-4091"><a href="#L-4091"><span class="linenos">4091</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-4092"><a href="#L-4092"><span class="linenos">4092</span></a>
-</span><span id="L-4093"><a href="#L-4093"><span class="linenos">4093</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="L-4094"><a href="#L-4094"><span class="linenos">4094</span></a>
-</span><span id="L-4095"><a href="#L-4095"><span class="linenos">4095</span></a> <span class="k">def</span> <span class="nf">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4096"><a href="#L-4096"><span class="linenos">4096</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-4085"><a href="#L-4085"><span class="linenos">4085</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_parameter</span><span class="p">)</span>
+</span><span id="L-4086"><a href="#L-4086"><span class="linenos">4086</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-4087"><a href="#L-4087"><span class="linenos">4087</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4088"><a href="#L-4088"><span class="linenos">4088</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wrapped</span><span class="o">=</span><span class="kc">True</span>
+</span><span id="L-4089"><a href="#L-4089"><span class="linenos">4089</span></a> <span class="p">)</span>
+</span><span id="L-4090"><a href="#L-4090"><span class="linenos">4090</span></a>
+</span><span id="L-4091"><a href="#L-4091"><span class="linenos">4091</span></a> <span class="k">def</span> <span class="nf">_parse_introducer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
+</span><span id="L-4092"><a href="#L-4092"><span class="linenos">4092</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-4093"><a href="#L-4093"><span class="linenos">4093</span></a> <span class="k">if</span> <span class="n">literal</span><span class="p">:</span>
+</span><span id="L-4094"><a href="#L-4094"><span class="linenos">4094</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">literal</span><span class="p">)</span>
+</span><span id="L-4095"><a href="#L-4095"><span class="linenos">4095</span></a>
+</span><span id="L-4096"><a href="#L-4096"><span class="linenos">4096</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="L-4097"><a href="#L-4097"><span class="linenos">4097</span></a>
-</span><span id="L-4098"><a href="#L-4098"><span class="linenos">4098</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-4099"><a href="#L-4099"><span class="linenos">4099</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
-</span><span id="L-4100"><a href="#L-4100"><span class="linenos">4100</span></a> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span>
-</span><span id="L-4101"><a href="#L-4101"><span class="linenos">4101</span></a> <span class="p">)</span>
-</span><span id="L-4102"><a href="#L-4102"><span class="linenos">4102</span></a>
-</span><span id="L-4103"><a href="#L-4103"><span class="linenos">4103</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
-</span><span id="L-4104"><a href="#L-4104"><span class="linenos">4104</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-4105"><a href="#L-4105"><span class="linenos">4105</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4106"><a href="#L-4106"><span class="linenos">4106</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()]</span>
+</span><span id="L-4098"><a href="#L-4098"><span class="linenos">4098</span></a> <span class="k">def</span> <span class="nf">_parse_session_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</span><span class="p">:</span>
+</span><span id="L-4099"><a href="#L-4099"><span class="linenos">4099</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4100"><a href="#L-4100"><span class="linenos">4100</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-4101"><a href="#L-4101"><span class="linenos">4101</span></a>
+</span><span id="L-4102"><a href="#L-4102"><span class="linenos">4102</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
+</span><span id="L-4103"><a href="#L-4103"><span class="linenos">4103</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-4104"><a href="#L-4104"><span class="linenos">4104</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-4105"><a href="#L-4105"><span class="linenos">4105</span></a>
+</span><span id="L-4106"><a href="#L-4106"><span class="linenos">4106</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="L-4107"><a href="#L-4107"><span class="linenos">4107</span></a>
-</span><span id="L-4108"><a href="#L-4108"><span class="linenos">4108</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">):</span>
-</span><span id="L-4109"><a href="#L-4109"><span class="linenos">4109</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-4108"><a href="#L-4108"><span class="linenos">4108</span></a> <span class="k">def</span> <span class="nf">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4109"><a href="#L-4109"><span class="linenos">4109</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-4110"><a href="#L-4110"><span class="linenos">4110</span></a>
-</span><span id="L-4111"><a href="#L-4111"><span class="linenos">4111</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-4112"><a href="#L-4112"><span class="linenos">4112</span></a>
-</span><span id="L-4113"><a href="#L-4113"><span class="linenos">4113</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="L-4114"><a href="#L-4114"><span class="linenos">4114</span></a>
-</span><span id="L-4115"><a href="#L-4115"><span class="linenos">4115</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
-</span><span id="L-4116"><a href="#L-4116"><span class="linenos">4116</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4117"><a href="#L-4117"><span class="linenos">4117</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
-</span><span id="L-4118"><a href="#L-4118"><span class="linenos">4118</span></a> <span class="p">)</span>
-</span><span id="L-4119"><a href="#L-4119"><span class="linenos">4119</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4120"><a href="#L-4120"><span class="linenos">4120</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="L-4121"><a href="#L-4121"><span class="linenos">4121</span></a>
-</span><span id="L-4122"><a href="#L-4122"><span class="linenos">4122</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)))</span>
+</span><span id="L-4111"><a href="#L-4111"><span class="linenos">4111</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-4112"><a href="#L-4112"><span class="linenos">4112</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="L-4113"><a href="#L-4113"><span class="linenos">4113</span></a> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span>
+</span><span id="L-4114"><a href="#L-4114"><span class="linenos">4114</span></a> <span class="p">)</span>
+</span><span id="L-4115"><a href="#L-4115"><span class="linenos">4115</span></a>
+</span><span id="L-4116"><a href="#L-4116"><span class="linenos">4116</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
+</span><span id="L-4117"><a href="#L-4117"><span class="linenos">4117</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-4118"><a href="#L-4118"><span class="linenos">4118</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4119"><a href="#L-4119"><span class="linenos">4119</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()]</span>
+</span><span id="L-4120"><a href="#L-4120"><span class="linenos">4120</span></a>
+</span><span id="L-4121"><a href="#L-4121"><span class="linenos">4121</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">):</span>
+</span><span id="L-4122"><a href="#L-4122"><span class="linenos">4122</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">expressions</span><span class="p">)</span>
</span><span id="L-4123"><a href="#L-4123"><span class="linenos">4123</span></a>
-</span><span id="L-4124"><a href="#L-4124"><span class="linenos">4124</span></a> <span class="k">def</span> <span class="nf">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4125"><a href="#L-4125"><span class="linenos">4125</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-4126"><a href="#L-4126"><span class="linenos">4126</span></a>
-</span><span id="L-4127"><a href="#L-4127"><span class="linenos">4127</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
-</span><span id="L-4128"><a href="#L-4128"><span class="linenos">4128</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="L-4129"><a href="#L-4129"><span class="linenos">4129</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-4130"><a href="#L-4130"><span class="linenos">4130</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4131"><a href="#L-4131"><span class="linenos">4131</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="L-4132"><a href="#L-4132"><span class="linenos">4132</span></a> <span class="k">pass</span>
-</span><span id="L-4133"><a href="#L-4133"><span class="linenos">4133</span></a> <span class="k">finally</span><span class="p">:</span>
-</span><span id="L-4134"><a href="#L-4134"><span class="linenos">4134</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
-</span><span id="L-4135"><a href="#L-4135"><span class="linenos">4135</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-4124"><a href="#L-4124"><span class="linenos">4124</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-4125"><a href="#L-4125"><span class="linenos">4125</span></a>
+</span><span id="L-4126"><a href="#L-4126"><span class="linenos">4126</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="L-4127"><a href="#L-4127"><span class="linenos">4127</span></a>
+</span><span id="L-4128"><a href="#L-4128"><span class="linenos">4128</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
+</span><span id="L-4129"><a href="#L-4129"><span class="linenos">4129</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4130"><a href="#L-4130"><span class="linenos">4130</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="L-4131"><a href="#L-4131"><span class="linenos">4131</span></a> <span class="p">)</span>
+</span><span id="L-4132"><a href="#L-4132"><span class="linenos">4132</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4133"><a href="#L-4133"><span class="linenos">4133</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="L-4134"><a href="#L-4134"><span class="linenos">4134</span></a>
+</span><span id="L-4135"><a href="#L-4135"><span class="linenos">4135</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)))</span>
</span><span id="L-4136"><a href="#L-4136"><span class="linenos">4136</span></a>
-</span><span id="L-4137"><a href="#L-4137"><span class="linenos">4137</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-4138"><a href="#L-4138"><span class="linenos">4138</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4137"><a href="#L-4137"><span class="linenos">4137</span></a> <span class="k">def</span> <span class="nf">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4138"><a href="#L-4138"><span class="linenos">4138</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-4139"><a href="#L-4139"><span class="linenos">4139</span></a>
-</span><span id="L-4140"><a href="#L-4140"><span class="linenos">4140</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">())</span>
-</span><span id="L-4141"><a href="#L-4141"><span class="linenos">4141</span></a>
-</span><span id="L-4142"><a href="#L-4142"><span class="linenos">4142</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-4143"><a href="#L-4143"><span class="linenos">4143</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-4144"><a href="#L-4144"><span class="linenos">4144</span></a>
-</span><span id="L-4145"><a href="#L-4145"><span class="linenos">4145</span></a> <span class="k">def</span> <span class="nf">_parse_field_def</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4146"><a href="#L-4146"><span class="linenos">4146</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-4147"><a href="#L-4147"><span class="linenos">4147</span></a>
-</span><span id="L-4148"><a href="#L-4148"><span class="linenos">4148</span></a> <span class="k">def</span> <span class="nf">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4149"><a href="#L-4149"><span class="linenos">4149</span></a> <span class="c1"># column defs are not really columns, they&#39;re identifiers</span>
-</span><span id="L-4150"><a href="#L-4150"><span class="linenos">4150</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
-</span><span id="L-4151"><a href="#L-4151"><span class="linenos">4151</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-4140"><a href="#L-4140"><span class="linenos">4140</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
+</span><span id="L-4141"><a href="#L-4141"><span class="linenos">4141</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="L-4142"><a href="#L-4142"><span class="linenos">4142</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-4143"><a href="#L-4143"><span class="linenos">4143</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4144"><a href="#L-4144"><span class="linenos">4144</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="L-4145"><a href="#L-4145"><span class="linenos">4145</span></a> <span class="k">pass</span>
+</span><span id="L-4146"><a href="#L-4146"><span class="linenos">4146</span></a> <span class="k">finally</span><span class="p">:</span>
+</span><span id="L-4147"><a href="#L-4147"><span class="linenos">4147</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
+</span><span id="L-4148"><a href="#L-4148"><span class="linenos">4148</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-4149"><a href="#L-4149"><span class="linenos">4149</span></a>
+</span><span id="L-4150"><a href="#L-4150"><span class="linenos">4150</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-4151"><a href="#L-4151"><span class="linenos">4151</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4152"><a href="#L-4152"><span class="linenos">4152</span></a>
-</span><span id="L-4153"><a href="#L-4153"><span class="linenos">4153</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4153"><a href="#L-4153"><span class="linenos">4153</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">())</span>
</span><span id="L-4154"><a href="#L-4154"><span class="linenos">4154</span></a>
-</span><span id="L-4155"><a href="#L-4155"><span class="linenos">4155</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;ORDINALITY&quot;</span><span class="p">):</span>
-</span><span id="L-4156"><a href="#L-4156"><span class="linenos">4156</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">ordinality</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4155"><a href="#L-4155"><span class="linenos">4155</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-4156"><a href="#L-4156"><span class="linenos">4156</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-4157"><a href="#L-4157"><span class="linenos">4157</span></a>
-</span><span id="L-4158"><a href="#L-4158"><span class="linenos">4158</span></a> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4159"><a href="#L-4159"><span class="linenos">4159</span></a>
-</span><span id="L-4160"><a href="#L-4160"><span class="linenos">4160</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
-</span><span id="L-4161"><a href="#L-4161"><span class="linenos">4161</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-4162"><a href="#L-4162"><span class="linenos">4162</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4163"><a href="#L-4163"><span class="linenos">4163</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">,</span>
-</span><span id="L-4164"><a href="#L-4164"><span class="linenos">4164</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="L-4165"><a href="#L-4165"><span class="linenos">4165</span></a> <span class="n">persisted</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PERSISTED&quot;</span><span class="p">),</span>
-</span><span id="L-4166"><a href="#L-4166"><span class="linenos">4166</span></a> <span class="n">not_null</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
-</span><span id="L-4167"><a href="#L-4167"><span class="linenos">4167</span></a> <span class="p">)</span>
-</span><span id="L-4168"><a href="#L-4168"><span class="linenos">4168</span></a> <span class="p">)</span>
-</span><span id="L-4169"><a href="#L-4169"><span class="linenos">4169</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-4170"><a href="#L-4170"><span class="linenos">4170</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
-</span><span id="L-4171"><a href="#L-4171"><span class="linenos">4171</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-4172"><a href="#L-4172"><span class="linenos">4172</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TransformColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
-</span><span id="L-4173"><a href="#L-4173"><span class="linenos">4173</span></a> <span class="p">)</span>
-</span><span id="L-4174"><a href="#L-4174"><span class="linenos">4174</span></a>
-</span><span id="L-4175"><a href="#L-4175"><span class="linenos">4175</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-4176"><a href="#L-4176"><span class="linenos">4176</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_constraint</span><span class="p">()</span>
-</span><span id="L-4177"><a href="#L-4177"><span class="linenos">4177</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
-</span><span id="L-4178"><a href="#L-4178"><span class="linenos">4178</span></a> <span class="k">break</span>
-</span><span id="L-4179"><a href="#L-4179"><span class="linenos">4179</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
-</span><span id="L-4180"><a href="#L-4180"><span class="linenos">4180</span></a>
-</span><span id="L-4181"><a href="#L-4181"><span class="linenos">4181</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">constraints</span><span class="p">:</span>
-</span><span id="L-4182"><a href="#L-4182"><span class="linenos">4182</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4183"><a href="#L-4183"><span class="linenos">4183</span></a>
-</span><span id="L-4184"><a href="#L-4184"><span class="linenos">4184</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">constraints</span><span class="o">=</span><span class="n">constraints</span><span class="p">)</span>
-</span><span id="L-4185"><a href="#L-4185"><span class="linenos">4185</span></a>
-</span><span id="L-4186"><a href="#L-4186"><span class="linenos">4186</span></a> <span class="k">def</span> <span class="nf">_parse_auto_increment</span><span class="p">(</span>
-</span><span id="L-4187"><a href="#L-4187"><span class="linenos">4187</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-4188"><a href="#L-4188"><span class="linenos">4188</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">:</span>
-</span><span id="L-4189"><a href="#L-4189"><span class="linenos">4189</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4190"><a href="#L-4190"><span class="linenos">4190</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4191"><a href="#L-4191"><span class="linenos">4191</span></a>
-</span><span id="L-4192"><a href="#L-4192"><span class="linenos">4192</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-4193"><a href="#L-4193"><span class="linenos">4193</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
-</span><span id="L-4194"><a href="#L-4194"><span class="linenos">4194</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="L-4195"><a href="#L-4195"><span class="linenos">4195</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-4196"><a href="#L-4196"><span class="linenos">4196</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">):</span>
-</span><span id="L-4197"><a href="#L-4197"><span class="linenos">4197</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-4198"><a href="#L-4198"><span class="linenos">4198</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">)</span>
-</span><span id="L-4199"><a href="#L-4199"><span class="linenos">4199</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-4200"><a href="#L-4200"><span class="linenos">4200</span></a>
-</span><span id="L-4201"><a href="#L-4201"><span class="linenos">4201</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">increment</span><span class="p">:</span>
-</span><span id="L-4202"><a href="#L-4202"><span class="linenos">4202</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span><span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">increment</span><span class="o">=</span><span class="n">increment</span><span class="p">)</span>
-</span><span id="L-4203"><a href="#L-4203"><span class="linenos">4203</span></a>
-</span><span id="L-4204"><a href="#L-4204"><span class="linenos">4204</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">()</span>
-</span><span id="L-4205"><a href="#L-4205"><span class="linenos">4205</span></a>
-</span><span id="L-4206"><a href="#L-4206"><span class="linenos">4206</span></a> <span class="k">def</span> <span class="nf">_parse_auto_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">]:</span>
-</span><span id="L-4207"><a href="#L-4207"><span class="linenos">4207</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;REFRESH&quot;</span><span class="p">):</span>
-</span><span id="L-4208"><a href="#L-4208"><span class="linenos">4208</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-4209"><a href="#L-4209"><span class="linenos">4209</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4210"><a href="#L-4210"><span class="linenos">4210</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-4211"><a href="#L-4211"><span class="linenos">4211</span></a>
-</span><span id="L-4212"><a href="#L-4212"><span class="linenos">4212</span></a> <span class="k">def</span> <span class="nf">_parse_compress</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">:</span>
-</span><span id="L-4213"><a href="#L-4213"><span class="linenos">4213</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-4214"><a href="#L-4214"><span class="linenos">4214</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4215"><a href="#L-4215"><span class="linenos">4215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
-</span><span id="L-4216"><a href="#L-4216"><span class="linenos">4216</span></a> <span class="p">)</span>
-</span><span id="L-4217"><a href="#L-4217"><span class="linenos">4217</span></a>
-</span><span id="L-4218"><a href="#L-4218"><span class="linenos">4218</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4219"><a href="#L-4219"><span class="linenos">4219</span></a>
-</span><span id="L-4220"><a href="#L-4220"><span class="linenos">4220</span></a> <span class="k">def</span> <span class="nf">_parse_generated_as_identity</span><span class="p">(</span>
-</span><span id="L-4221"><a href="#L-4221"><span class="linenos">4221</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-4222"><a href="#L-4222"><span class="linenos">4222</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="p">(</span>
-</span><span id="L-4223"><a href="#L-4223"><span class="linenos">4223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
-</span><span id="L-4224"><a href="#L-4224"><span class="linenos">4224</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span>
-</span><span id="L-4225"><a href="#L-4225"><span class="linenos">4225</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span>
-</span><span id="L-4226"><a href="#L-4226"><span class="linenos">4226</span></a> <span class="p">):</span>
-</span><span id="L-4227"><a href="#L-4227"><span class="linenos">4227</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">):</span>
-</span><span id="L-4228"><a href="#L-4228"><span class="linenos">4228</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
-</span><span id="L-4229"><a href="#L-4229"><span class="linenos">4229</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4230"><a href="#L-4230"><span class="linenos">4230</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">on_null</span><span class="o">=</span><span class="n">on_null</span>
-</span><span id="L-4231"><a href="#L-4231"><span class="linenos">4231</span></a> <span class="p">)</span>
-</span><span id="L-4232"><a href="#L-4232"><span class="linenos">4232</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4233"><a href="#L-4233"><span class="linenos">4233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALWAYS&quot;</span><span class="p">)</span>
-</span><span id="L-4234"><a href="#L-4234"><span class="linenos">4234</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4235"><a href="#L-4235"><span class="linenos">4235</span></a>
-</span><span id="L-4236"><a href="#L-4236"><span class="linenos">4236</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
-</span><span id="L-4237"><a href="#L-4237"><span class="linenos">4237</span></a>
-</span><span id="L-4238"><a href="#L-4238"><span class="linenos">4238</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
-</span><span id="L-4239"><a href="#L-4239"><span class="linenos">4239</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">)</span>
-</span><span id="L-4240"><a href="#L-4240"><span class="linenos">4240</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span>
-</span><span id="L-4241"><a href="#L-4241"><span class="linenos">4241</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
-</span><span id="L-4242"><a href="#L-4242"><span class="linenos">4242</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HIDDEN&quot;</span><span class="p">)</span>
-</span><span id="L-4243"><a href="#L-4243"><span class="linenos">4243</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">hidden</span><span class="o">=</span><span class="n">hidden</span><span class="p">)</span>
-</span><span id="L-4244"><a href="#L-4244"><span class="linenos">4244</span></a>
-</span><span id="L-4245"><a href="#L-4245"><span class="linenos">4245</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTITY&quot;</span><span class="p">)</span>
-</span><span id="L-4246"><a href="#L-4246"><span class="linenos">4246</span></a>
-</span><span id="L-4247"><a href="#L-4247"><span class="linenos">4247</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-4248"><a href="#L-4248"><span class="linenos">4248</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
-</span><span id="L-4249"><a href="#L-4249"><span class="linenos">4249</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4250"><a href="#L-4250"><span class="linenos">4250</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="L-4251"><a href="#L-4251"><span class="linenos">4251</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4252"><a href="#L-4252"><span class="linenos">4252</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MINVALUE&quot;</span><span class="p">):</span>
-</span><span id="L-4253"><a href="#L-4253"><span class="linenos">4253</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4254"><a href="#L-4254"><span class="linenos">4254</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAXVALUE&quot;</span><span class="p">):</span>
-</span><span id="L-4255"><a href="#L-4255"><span class="linenos">4255</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4256"><a href="#L-4256"><span class="linenos">4256</span></a>
-</span><span id="L-4257"><a href="#L-4257"><span class="linenos">4257</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
-</span><span id="L-4258"><a href="#L-4258"><span class="linenos">4258</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4259"><a href="#L-4259"><span class="linenos">4259</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
-</span><span id="L-4260"><a href="#L-4260"><span class="linenos">4260</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="L-4261"><a href="#L-4261"><span class="linenos">4261</span></a>
-</span><span id="L-4262"><a href="#L-4262"><span class="linenos">4262</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">identity</span><span class="p">:</span>
-</span><span id="L-4263"><a href="#L-4263"><span class="linenos">4263</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4264"><a href="#L-4264"><span class="linenos">4264</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-4265"><a href="#L-4265"><span class="linenos">4265</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
-</span><span id="L-4266"><a href="#L-4266"><span class="linenos">4266</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="L-4267"><a href="#L-4267"><span class="linenos">4267</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-</span><span id="L-4268"><a href="#L-4268"><span class="linenos">4268</span></a>
-</span><span id="L-4269"><a href="#L-4269"><span class="linenos">4269</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-4270"><a href="#L-4270"><span class="linenos">4270</span></a>
-</span><span id="L-4271"><a href="#L-4271"><span class="linenos">4271</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4272"><a href="#L-4272"><span class="linenos">4272</span></a>
-</span><span id="L-4273"><a href="#L-4273"><span class="linenos">4273</span></a> <span class="k">def</span> <span class="nf">_parse_inline</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">:</span>
-</span><span id="L-4274"><a href="#L-4274"><span class="linenos">4274</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">)</span>
-</span><span id="L-4275"><a href="#L-4275"><span class="linenos">4275</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4276"><a href="#L-4276"><span class="linenos">4276</span></a>
-</span><span id="L-4277"><a href="#L-4277"><span class="linenos">4277</span></a> <span class="k">def</span> <span class="nf">_parse_not_constraint</span><span class="p">(</span>
-</span><span id="L-4278"><a href="#L-4278"><span class="linenos">4278</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-4279"><a href="#L-4279"><span class="linenos">4279</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4280"><a href="#L-4280"><span class="linenos">4280</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
-</span><span id="L-4281"><a href="#L-4281"><span class="linenos">4281</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">)</span>
-</span><span id="L-4282"><a href="#L-4282"><span class="linenos">4282</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASESPECIFIC&quot;</span><span class="p">):</span>
-</span><span id="L-4283"><a href="#L-4283"><span class="linenos">4283</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4284"><a href="#L-4284"><span class="linenos">4284</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLICATION&quot;</span><span class="p">):</span>
-</span><span id="L-4285"><a href="#L-4285"><span class="linenos">4285</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotForReplicationColumnConstraint</span><span class="p">)</span>
-</span><span id="L-4286"><a href="#L-4286"><span class="linenos">4286</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4287"><a href="#L-4287"><span class="linenos">4287</span></a>
-</span><span id="L-4288"><a href="#L-4288"><span class="linenos">4288</span></a> <span class="k">def</span> <span class="nf">_parse_column_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4289"><a href="#L-4289"><span class="linenos">4289</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">):</span>
-</span><span id="L-4290"><a href="#L-4290"><span class="linenos">4290</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-4291"><a href="#L-4291"><span class="linenos">4291</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4292"><a href="#L-4292"><span class="linenos">4292</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4293"><a href="#L-4293"><span class="linenos">4293</span></a>
-</span><span id="L-4294"><a href="#L-4294"><span class="linenos">4294</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">):</span>
-</span><span id="L-4295"><a href="#L-4295"><span class="linenos">4295</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4296"><a href="#L-4296"><span class="linenos">4296</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
-</span><span id="L-4297"><a href="#L-4297"><span class="linenos">4297</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-4298"><a href="#L-4298"><span class="linenos">4298</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">),</span>
-</span><span id="L-4299"><a href="#L-4299"><span class="linenos">4299</span></a> <span class="p">)</span>
+</span><span id="L-4158"><a href="#L-4158"><span class="linenos">4158</span></a> <span class="k">def</span> <span class="nf">_parse_field_def</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4159"><a href="#L-4159"><span class="linenos">4159</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-4160"><a href="#L-4160"><span class="linenos">4160</span></a>
+</span><span id="L-4161"><a href="#L-4161"><span class="linenos">4161</span></a> <span class="k">def</span> <span class="nf">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4162"><a href="#L-4162"><span class="linenos">4162</span></a> <span class="c1"># column defs are not really columns, they&#39;re identifiers</span>
+</span><span id="L-4163"><a href="#L-4163"><span class="linenos">4163</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
+</span><span id="L-4164"><a href="#L-4164"><span class="linenos">4164</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-4165"><a href="#L-4165"><span class="linenos">4165</span></a>
+</span><span id="L-4166"><a href="#L-4166"><span class="linenos">4166</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4167"><a href="#L-4167"><span class="linenos">4167</span></a>
+</span><span id="L-4168"><a href="#L-4168"><span class="linenos">4168</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;ORDINALITY&quot;</span><span class="p">):</span>
+</span><span id="L-4169"><a href="#L-4169"><span class="linenos">4169</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">ordinality</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4170"><a href="#L-4170"><span class="linenos">4170</span></a>
+</span><span id="L-4171"><a href="#L-4171"><span class="linenos">4171</span></a> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4172"><a href="#L-4172"><span class="linenos">4172</span></a>
+</span><span id="L-4173"><a href="#L-4173"><span class="linenos">4173</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
+</span><span id="L-4174"><a href="#L-4174"><span class="linenos">4174</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-4175"><a href="#L-4175"><span class="linenos">4175</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4176"><a href="#L-4176"><span class="linenos">4176</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">,</span>
+</span><span id="L-4177"><a href="#L-4177"><span class="linenos">4177</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="L-4178"><a href="#L-4178"><span class="linenos">4178</span></a> <span class="n">persisted</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PERSISTED&quot;</span><span class="p">),</span>
+</span><span id="L-4179"><a href="#L-4179"><span class="linenos">4179</span></a> <span class="n">not_null</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
+</span><span id="L-4180"><a href="#L-4180"><span class="linenos">4180</span></a> <span class="p">)</span>
+</span><span id="L-4181"><a href="#L-4181"><span class="linenos">4181</span></a> <span class="p">)</span>
+</span><span id="L-4182"><a href="#L-4182"><span class="linenos">4182</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-4183"><a href="#L-4183"><span class="linenos">4183</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
+</span><span id="L-4184"><a href="#L-4184"><span class="linenos">4184</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-4185"><a href="#L-4185"><span class="linenos">4185</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TransformColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
+</span><span id="L-4186"><a href="#L-4186"><span class="linenos">4186</span></a> <span class="p">)</span>
+</span><span id="L-4187"><a href="#L-4187"><span class="linenos">4187</span></a>
+</span><span id="L-4188"><a href="#L-4188"><span class="linenos">4188</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-4189"><a href="#L-4189"><span class="linenos">4189</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_constraint</span><span class="p">()</span>
+</span><span id="L-4190"><a href="#L-4190"><span class="linenos">4190</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
+</span><span id="L-4191"><a href="#L-4191"><span class="linenos">4191</span></a> <span class="k">break</span>
+</span><span id="L-4192"><a href="#L-4192"><span class="linenos">4192</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
+</span><span id="L-4193"><a href="#L-4193"><span class="linenos">4193</span></a>
+</span><span id="L-4194"><a href="#L-4194"><span class="linenos">4194</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">constraints</span><span class="p">:</span>
+</span><span id="L-4195"><a href="#L-4195"><span class="linenos">4195</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4196"><a href="#L-4196"><span class="linenos">4196</span></a>
+</span><span id="L-4197"><a href="#L-4197"><span class="linenos">4197</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">constraints</span><span class="o">=</span><span class="n">constraints</span><span class="p">)</span>
+</span><span id="L-4198"><a href="#L-4198"><span class="linenos">4198</span></a>
+</span><span id="L-4199"><a href="#L-4199"><span class="linenos">4199</span></a> <span class="k">def</span> <span class="nf">_parse_auto_increment</span><span class="p">(</span>
+</span><span id="L-4200"><a href="#L-4200"><span class="linenos">4200</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-4201"><a href="#L-4201"><span class="linenos">4201</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">:</span>
+</span><span id="L-4202"><a href="#L-4202"><span class="linenos">4202</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4203"><a href="#L-4203"><span class="linenos">4203</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4204"><a href="#L-4204"><span class="linenos">4204</span></a>
+</span><span id="L-4205"><a href="#L-4205"><span class="linenos">4205</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-4206"><a href="#L-4206"><span class="linenos">4206</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="L-4207"><a href="#L-4207"><span class="linenos">4207</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-4208"><a href="#L-4208"><span class="linenos">4208</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-4209"><a href="#L-4209"><span class="linenos">4209</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">):</span>
+</span><span id="L-4210"><a href="#L-4210"><span class="linenos">4210</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-4211"><a href="#L-4211"><span class="linenos">4211</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">)</span>
+</span><span id="L-4212"><a href="#L-4212"><span class="linenos">4212</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-4213"><a href="#L-4213"><span class="linenos">4213</span></a>
+</span><span id="L-4214"><a href="#L-4214"><span class="linenos">4214</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">increment</span><span class="p">:</span>
+</span><span id="L-4215"><a href="#L-4215"><span class="linenos">4215</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span><span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">increment</span><span class="o">=</span><span class="n">increment</span><span class="p">)</span>
+</span><span id="L-4216"><a href="#L-4216"><span class="linenos">4216</span></a>
+</span><span id="L-4217"><a href="#L-4217"><span class="linenos">4217</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">()</span>
+</span><span id="L-4218"><a href="#L-4218"><span class="linenos">4218</span></a>
+</span><span id="L-4219"><a href="#L-4219"><span class="linenos">4219</span></a> <span class="k">def</span> <span class="nf">_parse_auto_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">]:</span>
+</span><span id="L-4220"><a href="#L-4220"><span class="linenos">4220</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;REFRESH&quot;</span><span class="p">):</span>
+</span><span id="L-4221"><a href="#L-4221"><span class="linenos">4221</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-4222"><a href="#L-4222"><span class="linenos">4222</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4223"><a href="#L-4223"><span class="linenos">4223</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-4224"><a href="#L-4224"><span class="linenos">4224</span></a>
+</span><span id="L-4225"><a href="#L-4225"><span class="linenos">4225</span></a> <span class="k">def</span> <span class="nf">_parse_compress</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">:</span>
+</span><span id="L-4226"><a href="#L-4226"><span class="linenos">4226</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-4227"><a href="#L-4227"><span class="linenos">4227</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4228"><a href="#L-4228"><span class="linenos">4228</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="L-4229"><a href="#L-4229"><span class="linenos">4229</span></a> <span class="p">)</span>
+</span><span id="L-4230"><a href="#L-4230"><span class="linenos">4230</span></a>
+</span><span id="L-4231"><a href="#L-4231"><span class="linenos">4231</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="L-4232"><a href="#L-4232"><span class="linenos">4232</span></a>
+</span><span id="L-4233"><a href="#L-4233"><span class="linenos">4233</span></a> <span class="k">def</span> <span class="nf">_parse_generated_as_identity</span><span class="p">(</span>
+</span><span id="L-4234"><a href="#L-4234"><span class="linenos">4234</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-4235"><a href="#L-4235"><span class="linenos">4235</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="p">(</span>
+</span><span id="L-4236"><a href="#L-4236"><span class="linenos">4236</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
+</span><span id="L-4237"><a href="#L-4237"><span class="linenos">4237</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span>
+</span><span id="L-4238"><a href="#L-4238"><span class="linenos">4238</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span>
+</span><span id="L-4239"><a href="#L-4239"><span class="linenos">4239</span></a> <span class="p">):</span>
+</span><span id="L-4240"><a href="#L-4240"><span class="linenos">4240</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">):</span>
+</span><span id="L-4241"><a href="#L-4241"><span class="linenos">4241</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
+</span><span id="L-4242"><a href="#L-4242"><span class="linenos">4242</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4243"><a href="#L-4243"><span class="linenos">4243</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">on_null</span><span class="o">=</span><span class="n">on_null</span>
+</span><span id="L-4244"><a href="#L-4244"><span class="linenos">4244</span></a> <span class="p">)</span>
+</span><span id="L-4245"><a href="#L-4245"><span class="linenos">4245</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4246"><a href="#L-4246"><span class="linenos">4246</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALWAYS&quot;</span><span class="p">)</span>
+</span><span id="L-4247"><a href="#L-4247"><span class="linenos">4247</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4248"><a href="#L-4248"><span class="linenos">4248</span></a>
+</span><span id="L-4249"><a href="#L-4249"><span class="linenos">4249</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
+</span><span id="L-4250"><a href="#L-4250"><span class="linenos">4250</span></a>
+</span><span id="L-4251"><a href="#L-4251"><span class="linenos">4251</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
+</span><span id="L-4252"><a href="#L-4252"><span class="linenos">4252</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">)</span>
+</span><span id="L-4253"><a href="#L-4253"><span class="linenos">4253</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span>
+</span><span id="L-4254"><a href="#L-4254"><span class="linenos">4254</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
+</span><span id="L-4255"><a href="#L-4255"><span class="linenos">4255</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HIDDEN&quot;</span><span class="p">)</span>
+</span><span id="L-4256"><a href="#L-4256"><span class="linenos">4256</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">hidden</span><span class="o">=</span><span class="n">hidden</span><span class="p">)</span>
+</span><span id="L-4257"><a href="#L-4257"><span class="linenos">4257</span></a>
+</span><span id="L-4258"><a href="#L-4258"><span class="linenos">4258</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTITY&quot;</span><span class="p">)</span>
+</span><span id="L-4259"><a href="#L-4259"><span class="linenos">4259</span></a>
+</span><span id="L-4260"><a href="#L-4260"><span class="linenos">4260</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-4261"><a href="#L-4261"><span class="linenos">4261</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
+</span><span id="L-4262"><a href="#L-4262"><span class="linenos">4262</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="L-4263"><a href="#L-4263"><span class="linenos">4263</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
+</span><span id="L-4264"><a href="#L-4264"><span class="linenos">4264</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="L-4265"><a href="#L-4265"><span class="linenos">4265</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MINVALUE&quot;</span><span class="p">):</span>
+</span><span id="L-4266"><a href="#L-4266"><span class="linenos">4266</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="L-4267"><a href="#L-4267"><span class="linenos">4267</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAXVALUE&quot;</span><span class="p">):</span>
+</span><span id="L-4268"><a href="#L-4268"><span class="linenos">4268</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="L-4269"><a href="#L-4269"><span class="linenos">4269</span></a>
+</span><span id="L-4270"><a href="#L-4270"><span class="linenos">4270</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
+</span><span id="L-4271"><a href="#L-4271"><span class="linenos">4271</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4272"><a href="#L-4272"><span class="linenos">4272</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
+</span><span id="L-4273"><a href="#L-4273"><span class="linenos">4273</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="L-4274"><a href="#L-4274"><span class="linenos">4274</span></a>
+</span><span id="L-4275"><a href="#L-4275"><span class="linenos">4275</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">identity</span><span class="p">:</span>
+</span><span id="L-4276"><a href="#L-4276"><span class="linenos">4276</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="L-4277"><a href="#L-4277"><span class="linenos">4277</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-4278"><a href="#L-4278"><span class="linenos">4278</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="L-4279"><a href="#L-4279"><span class="linenos">4279</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="L-4280"><a href="#L-4280"><span class="linenos">4280</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
+</span><span id="L-4281"><a href="#L-4281"><span class="linenos">4281</span></a>
+</span><span id="L-4282"><a href="#L-4282"><span class="linenos">4282</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-4283"><a href="#L-4283"><span class="linenos">4283</span></a>
+</span><span id="L-4284"><a href="#L-4284"><span class="linenos">4284</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4285"><a href="#L-4285"><span class="linenos">4285</span></a>
+</span><span id="L-4286"><a href="#L-4286"><span class="linenos">4286</span></a> <span class="k">def</span> <span class="nf">_parse_inline</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">:</span>
+</span><span id="L-4287"><a href="#L-4287"><span class="linenos">4287</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">)</span>
+</span><span id="L-4288"><a href="#L-4288"><span class="linenos">4288</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="L-4289"><a href="#L-4289"><span class="linenos">4289</span></a>
+</span><span id="L-4290"><a href="#L-4290"><span class="linenos">4290</span></a> <span class="k">def</span> <span class="nf">_parse_not_constraint</span><span class="p">(</span>
+</span><span id="L-4291"><a href="#L-4291"><span class="linenos">4291</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-4292"><a href="#L-4292"><span class="linenos">4292</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4293"><a href="#L-4293"><span class="linenos">4293</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
+</span><span id="L-4294"><a href="#L-4294"><span class="linenos">4294</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">)</span>
+</span><span id="L-4295"><a href="#L-4295"><span class="linenos">4295</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASESPECIFIC&quot;</span><span class="p">):</span>
+</span><span id="L-4296"><a href="#L-4296"><span class="linenos">4296</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4297"><a href="#L-4297"><span class="linenos">4297</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLICATION&quot;</span><span class="p">):</span>
+</span><span id="L-4298"><a href="#L-4298"><span class="linenos">4298</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotForReplicationColumnConstraint</span><span class="p">)</span>
+</span><span id="L-4299"><a href="#L-4299"><span class="linenos">4299</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4300"><a href="#L-4300"><span class="linenos">4300</span></a>
-</span><span id="L-4301"><a href="#L-4301"><span class="linenos">4301</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4302"><a href="#L-4302"><span class="linenos">4302</span></a>
-</span><span id="L-4303"><a href="#L-4303"><span class="linenos">4303</span></a> <span class="k">def</span> <span class="nf">_parse_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4304"><a href="#L-4304"><span class="linenos">4304</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">):</span>
-</span><span id="L-4305"><a href="#L-4305"><span class="linenos">4305</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">(</span><span class="n">constraints</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">)</span>
+</span><span id="L-4301"><a href="#L-4301"><span class="linenos">4301</span></a> <span class="k">def</span> <span class="nf">_parse_column_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4302"><a href="#L-4302"><span class="linenos">4302</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">):</span>
+</span><span id="L-4303"><a href="#L-4303"><span class="linenos">4303</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-4304"><a href="#L-4304"><span class="linenos">4304</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4305"><a href="#L-4305"><span class="linenos">4305</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-4306"><a href="#L-4306"><span class="linenos">4306</span></a>
-</span><span id="L-4307"><a href="#L-4307"><span class="linenos">4307</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-4308"><a href="#L-4308"><span class="linenos">4308</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4309"><a href="#L-4309"><span class="linenos">4309</span></a>
-</span><span id="L-4310"><a href="#L-4310"><span class="linenos">4310</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-4311"><a href="#L-4311"><span class="linenos">4311</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
-</span><span id="L-4312"><a href="#L-4312"><span class="linenos">4312</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
-</span><span id="L-4313"><a href="#L-4313"><span class="linenos">4313</span></a> <span class="k">break</span>
-</span><span id="L-4314"><a href="#L-4314"><span class="linenos">4314</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
+</span><span id="L-4307"><a href="#L-4307"><span class="linenos">4307</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">):</span>
+</span><span id="L-4308"><a href="#L-4308"><span class="linenos">4308</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4309"><a href="#L-4309"><span class="linenos">4309</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
+</span><span id="L-4310"><a href="#L-4310"><span class="linenos">4310</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4311"><a href="#L-4311"><span class="linenos">4311</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">),</span>
+</span><span id="L-4312"><a href="#L-4312"><span class="linenos">4312</span></a> <span class="p">)</span>
+</span><span id="L-4313"><a href="#L-4313"><span class="linenos">4313</span></a>
+</span><span id="L-4314"><a href="#L-4314"><span class="linenos">4314</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4315"><a href="#L-4315"><span class="linenos">4315</span></a>
-</span><span id="L-4316"><a href="#L-4316"><span class="linenos">4316</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Constraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-4317"><a href="#L-4317"><span class="linenos">4317</span></a>
-</span><span id="L-4318"><a href="#L-4318"><span class="linenos">4318</span></a> <span class="k">def</span> <span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
-</span><span id="L-4319"><a href="#L-4319"><span class="linenos">4319</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4320"><a href="#L-4320"><span class="linenos">4320</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4321"><a href="#L-4321"><span class="linenos">4321</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span>
-</span><span id="L-4322"><a href="#L-4322"><span class="linenos">4322</span></a> <span class="n">constraints</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span>
-</span><span id="L-4323"><a href="#L-4323"><span class="linenos">4323</span></a> <span class="p">):</span>
-</span><span id="L-4324"><a href="#L-4324"><span class="linenos">4324</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4325"><a href="#L-4325"><span class="linenos">4325</span></a>
-</span><span id="L-4326"><a href="#L-4326"><span class="linenos">4326</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-4327"><a href="#L-4327"><span class="linenos">4327</span></a> <span class="k">if</span> <span class="n">constraint</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">:</span>
-</span><span id="L-4328"><a href="#L-4328"><span class="linenos">4328</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser found for schema constraint </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
-</span><span id="L-4329"><a href="#L-4329"><span class="linenos">4329</span></a>
-</span><span id="L-4330"><a href="#L-4330"><span class="linenos">4330</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="n">constraint</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="L-4331"><a href="#L-4331"><span class="linenos">4331</span></a>
-</span><span id="L-4332"><a href="#L-4332"><span class="linenos">4332</span></a> <span class="k">def</span> <span class="nf">_parse_unique</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">:</span>
-</span><span id="L-4333"><a href="#L-4333"><span class="linenos">4333</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
-</span><span id="L-4334"><a href="#L-4334"><span class="linenos">4334</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4335"><a href="#L-4335"><span class="linenos">4335</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">,</span>
-</span><span id="L-4336"><a href="#L-4336"><span class="linenos">4336</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)),</span>
-</span><span id="L-4337"><a href="#L-4337"><span class="linenos">4337</span></a> <span class="n">index_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
-</span><span id="L-4338"><a href="#L-4338"><span class="linenos">4338</span></a> <span class="p">)</span>
-</span><span id="L-4339"><a href="#L-4339"><span class="linenos">4339</span></a>
-</span><span id="L-4340"><a href="#L-4340"><span class="linenos">4340</span></a> <span class="k">def</span> <span class="nf">_parse_key_constraint_options</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-4341"><a href="#L-4341"><span class="linenos">4341</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4342"><a href="#L-4342"><span class="linenos">4342</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-4343"><a href="#L-4343"><span class="linenos">4343</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-4344"><a href="#L-4344"><span class="linenos">4344</span></a> <span class="k">break</span>
-</span><span id="L-4345"><a href="#L-4345"><span class="linenos">4345</span></a>
-</span><span id="L-4346"><a href="#L-4346"><span class="linenos">4346</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
-</span><span id="L-4347"><a href="#L-4347"><span class="linenos">4347</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4348"><a href="#L-4348"><span class="linenos">4348</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-4349"><a href="#L-4349"><span class="linenos">4349</span></a>
-</span><span id="L-4350"><a href="#L-4350"><span class="linenos">4350</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
-</span><span id="L-4351"><a href="#L-4351"><span class="linenos">4351</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="L-4352"><a href="#L-4352"><span class="linenos">4352</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">):</span>
-</span><span id="L-4353"><a href="#L-4353"><span class="linenos">4353</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
-</span><span id="L-4354"><a href="#L-4354"><span class="linenos">4354</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESTRICT&quot;</span><span class="p">):</span>
-</span><span id="L-4355"><a href="#L-4355"><span class="linenos">4355</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;RESTRICT&quot;</span>
-</span><span id="L-4356"><a href="#L-4356"><span class="linenos">4356</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">):</span>
-</span><span id="L-4357"><a href="#L-4357"><span class="linenos">4357</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
-</span><span id="L-4358"><a href="#L-4358"><span class="linenos">4358</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
-</span><span id="L-4359"><a href="#L-4359"><span class="linenos">4359</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
-</span><span id="L-4360"><a href="#L-4360"><span class="linenos">4360</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4361"><a href="#L-4361"><span class="linenos">4361</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Invalid key constraint&quot;</span><span class="p">)</span>
+</span><span id="L-4316"><a href="#L-4316"><span class="linenos">4316</span></a> <span class="k">def</span> <span class="nf">_parse_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4317"><a href="#L-4317"><span class="linenos">4317</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">):</span>
+</span><span id="L-4318"><a href="#L-4318"><span class="linenos">4318</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">(</span><span class="n">constraints</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">)</span>
+</span><span id="L-4319"><a href="#L-4319"><span class="linenos">4319</span></a>
+</span><span id="L-4320"><a href="#L-4320"><span class="linenos">4320</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-4321"><a href="#L-4321"><span class="linenos">4321</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4322"><a href="#L-4322"><span class="linenos">4322</span></a>
+</span><span id="L-4323"><a href="#L-4323"><span class="linenos">4323</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-4324"><a href="#L-4324"><span class="linenos">4324</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
+</span><span id="L-4325"><a href="#L-4325"><span class="linenos">4325</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
+</span><span id="L-4326"><a href="#L-4326"><span class="linenos">4326</span></a> <span class="k">break</span>
+</span><span id="L-4327"><a href="#L-4327"><span class="linenos">4327</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
+</span><span id="L-4328"><a href="#L-4328"><span class="linenos">4328</span></a>
+</span><span id="L-4329"><a href="#L-4329"><span class="linenos">4329</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Constraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-4330"><a href="#L-4330"><span class="linenos">4330</span></a>
+</span><span id="L-4331"><a href="#L-4331"><span class="linenos">4331</span></a> <span class="k">def</span> <span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
+</span><span id="L-4332"><a href="#L-4332"><span class="linenos">4332</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4333"><a href="#L-4333"><span class="linenos">4333</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4334"><a href="#L-4334"><span class="linenos">4334</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span>
+</span><span id="L-4335"><a href="#L-4335"><span class="linenos">4335</span></a> <span class="n">constraints</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span>
+</span><span id="L-4336"><a href="#L-4336"><span class="linenos">4336</span></a> <span class="p">):</span>
+</span><span id="L-4337"><a href="#L-4337"><span class="linenos">4337</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4338"><a href="#L-4338"><span class="linenos">4338</span></a>
+</span><span id="L-4339"><a href="#L-4339"><span class="linenos">4339</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-4340"><a href="#L-4340"><span class="linenos">4340</span></a> <span class="k">if</span> <span class="n">constraint</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">:</span>
+</span><span id="L-4341"><a href="#L-4341"><span class="linenos">4341</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser found for schema constraint </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="L-4342"><a href="#L-4342"><span class="linenos">4342</span></a>
+</span><span id="L-4343"><a href="#L-4343"><span class="linenos">4343</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="n">constraint</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-4344"><a href="#L-4344"><span class="linenos">4344</span></a>
+</span><span id="L-4345"><a href="#L-4345"><span class="linenos">4345</span></a> <span class="k">def</span> <span class="nf">_parse_unique</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">:</span>
+</span><span id="L-4346"><a href="#L-4346"><span class="linenos">4346</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
+</span><span id="L-4347"><a href="#L-4347"><span class="linenos">4347</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4348"><a href="#L-4348"><span class="linenos">4348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">,</span>
+</span><span id="L-4349"><a href="#L-4349"><span class="linenos">4349</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)),</span>
+</span><span id="L-4350"><a href="#L-4350"><span class="linenos">4350</span></a> <span class="n">index_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
+</span><span id="L-4351"><a href="#L-4351"><span class="linenos">4351</span></a> <span class="p">)</span>
+</span><span id="L-4352"><a href="#L-4352"><span class="linenos">4352</span></a>
+</span><span id="L-4353"><a href="#L-4353"><span class="linenos">4353</span></a> <span class="k">def</span> <span class="nf">_parse_key_constraint_options</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-4354"><a href="#L-4354"><span class="linenos">4354</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4355"><a href="#L-4355"><span class="linenos">4355</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-4356"><a href="#L-4356"><span class="linenos">4356</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-4357"><a href="#L-4357"><span class="linenos">4357</span></a> <span class="k">break</span>
+</span><span id="L-4358"><a href="#L-4358"><span class="linenos">4358</span></a>
+</span><span id="L-4359"><a href="#L-4359"><span class="linenos">4359</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
+</span><span id="L-4360"><a href="#L-4360"><span class="linenos">4360</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4361"><a href="#L-4361"><span class="linenos">4361</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-4362"><a href="#L-4362"><span class="linenos">4362</span></a>
-</span><span id="L-4363"><a href="#L-4363"><span class="linenos">4363</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-4364"><a href="#L-4364"><span class="linenos">4364</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;ENFORCED&quot;</span><span class="p">):</span>
-</span><span id="L-4365"><a href="#L-4365"><span class="linenos">4365</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NOT ENFORCED&quot;</span><span class="p">)</span>
-</span><span id="L-4366"><a href="#L-4366"><span class="linenos">4366</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFERRABLE&quot;</span><span class="p">):</span>
-</span><span id="L-4367"><a href="#L-4367"><span class="linenos">4367</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;DEFERRABLE&quot;</span><span class="p">)</span>
-</span><span id="L-4368"><a href="#L-4368"><span class="linenos">4368</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INITIALLY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFERRED&quot;</span><span class="p">):</span>
-</span><span id="L-4369"><a href="#L-4369"><span class="linenos">4369</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;INITIALLY DEFERRED&quot;</span><span class="p">)</span>
-</span><span id="L-4370"><a href="#L-4370"><span class="linenos">4370</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NORELY&quot;</span><span class="p">):</span>
-</span><span id="L-4371"><a href="#L-4371"><span class="linenos">4371</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NORELY&quot;</span><span class="p">)</span>
-</span><span id="L-4372"><a href="#L-4372"><span class="linenos">4372</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;FULL&quot;</span><span class="p">):</span>
-</span><span id="L-4373"><a href="#L-4373"><span class="linenos">4373</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;MATCH FULL&quot;</span><span class="p">)</span>
-</span><span id="L-4374"><a href="#L-4374"><span class="linenos">4374</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4375"><a href="#L-4375"><span class="linenos">4375</span></a> <span class="k">break</span>
-</span><span id="L-4376"><a href="#L-4376"><span class="linenos">4376</span></a>
-</span><span id="L-4377"><a href="#L-4377"><span class="linenos">4377</span></a> <span class="k">return</span> <span class="n">options</span>
-</span><span id="L-4378"><a href="#L-4378"><span class="linenos">4378</span></a>
-</span><span id="L-4379"><a href="#L-4379"><span class="linenos">4379</span></a> <span class="k">def</span> <span class="nf">_parse_references</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Reference</span><span class="p">]:</span>
-</span><span id="L-4380"><a href="#L-4380"><span class="linenos">4380</span></a> <span class="k">if</span> <span class="n">match</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">):</span>
-</span><span id="L-4381"><a href="#L-4381"><span class="linenos">4381</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4382"><a href="#L-4382"><span class="linenos">4382</span></a>
-</span><span id="L-4383"><a href="#L-4383"><span class="linenos">4383</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4384"><a href="#L-4384"><span class="linenos">4384</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4385"><a href="#L-4385"><span class="linenos">4385</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
-</span><span id="L-4386"><a href="#L-4386"><span class="linenos">4386</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Reference</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
-</span><span id="L-4387"><a href="#L-4387"><span class="linenos">4387</span></a>
-</span><span id="L-4388"><a href="#L-4388"><span class="linenos">4388</span></a> <span class="k">def</span> <span class="nf">_parse_foreign_key</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">:</span>
-</span><span id="L-4389"><a href="#L-4389"><span class="linenos">4389</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="L-4390"><a href="#L-4390"><span class="linenos">4390</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_references</span><span class="p">()</span>
-</span><span id="L-4391"><a href="#L-4391"><span class="linenos">4391</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="L-4392"><a href="#L-4392"><span class="linenos">4392</span></a>
-</span><span id="L-4393"><a href="#L-4393"><span class="linenos">4393</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
-</span><span id="L-4394"><a href="#L-4394"><span class="linenos">4394</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">)):</span>
-</span><span id="L-4395"><a href="#L-4395"><span class="linenos">4395</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected DELETE or UPDATE&quot;</span><span class="p">)</span>
-</span><span id="L-4396"><a href="#L-4396"><span class="linenos">4396</span></a>
-</span><span id="L-4397"><a href="#L-4397"><span class="linenos">4397</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="L-4398"><a href="#L-4398"><span class="linenos">4398</span></a>
-</span><span id="L-4399"><a href="#L-4399"><span class="linenos">4399</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
-</span><span id="L-4400"><a href="#L-4400"><span class="linenos">4400</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="L-4401"><a href="#L-4401"><span class="linenos">4401</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">):</span>
-</span><span id="L-4402"><a href="#L-4402"><span class="linenos">4402</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">))</span>
-</span><span id="L-4403"><a href="#L-4403"><span class="linenos">4403</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-4404"><a href="#L-4404"><span class="linenos">4404</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4405"><a href="#L-4405"><span class="linenos">4405</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-4406"><a href="#L-4406"><span class="linenos">4406</span></a> <span class="n">action</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-4407"><a href="#L-4407"><span class="linenos">4407</span></a>
-</span><span id="L-4408"><a href="#L-4408"><span class="linenos">4408</span></a> <span class="n">options</span><span class="p">[</span><span class="n">kind</span><span class="p">]</span> <span class="o">=</span> <span class="n">action</span>
+</span><span id="L-4363"><a href="#L-4363"><span class="linenos">4363</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
+</span><span id="L-4364"><a href="#L-4364"><span class="linenos">4364</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="L-4365"><a href="#L-4365"><span class="linenos">4365</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">):</span>
+</span><span id="L-4366"><a href="#L-4366"><span class="linenos">4366</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
+</span><span id="L-4367"><a href="#L-4367"><span class="linenos">4367</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESTRICT&quot;</span><span class="p">):</span>
+</span><span id="L-4368"><a href="#L-4368"><span class="linenos">4368</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;RESTRICT&quot;</span>
+</span><span id="L-4369"><a href="#L-4369"><span class="linenos">4369</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">):</span>
+</span><span id="L-4370"><a href="#L-4370"><span class="linenos">4370</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
+</span><span id="L-4371"><a href="#L-4371"><span class="linenos">4371</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
+</span><span id="L-4372"><a href="#L-4372"><span class="linenos">4372</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
+</span><span id="L-4373"><a href="#L-4373"><span class="linenos">4373</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4374"><a href="#L-4374"><span class="linenos">4374</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Invalid key constraint&quot;</span><span class="p">)</span>
+</span><span id="L-4375"><a href="#L-4375"><span class="linenos">4375</span></a>
+</span><span id="L-4376"><a href="#L-4376"><span class="linenos">4376</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-4377"><a href="#L-4377"><span class="linenos">4377</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;ENFORCED&quot;</span><span class="p">):</span>
+</span><span id="L-4378"><a href="#L-4378"><span class="linenos">4378</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NOT ENFORCED&quot;</span><span class="p">)</span>
+</span><span id="L-4379"><a href="#L-4379"><span class="linenos">4379</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFERRABLE&quot;</span><span class="p">):</span>
+</span><span id="L-4380"><a href="#L-4380"><span class="linenos">4380</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;DEFERRABLE&quot;</span><span class="p">)</span>
+</span><span id="L-4381"><a href="#L-4381"><span class="linenos">4381</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INITIALLY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFERRED&quot;</span><span class="p">):</span>
+</span><span id="L-4382"><a href="#L-4382"><span class="linenos">4382</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;INITIALLY DEFERRED&quot;</span><span class="p">)</span>
+</span><span id="L-4383"><a href="#L-4383"><span class="linenos">4383</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NORELY&quot;</span><span class="p">):</span>
+</span><span id="L-4384"><a href="#L-4384"><span class="linenos">4384</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NORELY&quot;</span><span class="p">)</span>
+</span><span id="L-4385"><a href="#L-4385"><span class="linenos">4385</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;FULL&quot;</span><span class="p">):</span>
+</span><span id="L-4386"><a href="#L-4386"><span class="linenos">4386</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;MATCH FULL&quot;</span><span class="p">)</span>
+</span><span id="L-4387"><a href="#L-4387"><span class="linenos">4387</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4388"><a href="#L-4388"><span class="linenos">4388</span></a> <span class="k">break</span>
+</span><span id="L-4389"><a href="#L-4389"><span class="linenos">4389</span></a>
+</span><span id="L-4390"><a href="#L-4390"><span class="linenos">4390</span></a> <span class="k">return</span> <span class="n">options</span>
+</span><span id="L-4391"><a href="#L-4391"><span class="linenos">4391</span></a>
+</span><span id="L-4392"><a href="#L-4392"><span class="linenos">4392</span></a> <span class="k">def</span> <span class="nf">_parse_references</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Reference</span><span class="p">]:</span>
+</span><span id="L-4393"><a href="#L-4393"><span class="linenos">4393</span></a> <span class="k">if</span> <span class="n">match</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">):</span>
+</span><span id="L-4394"><a href="#L-4394"><span class="linenos">4394</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4395"><a href="#L-4395"><span class="linenos">4395</span></a>
+</span><span id="L-4396"><a href="#L-4396"><span class="linenos">4396</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4397"><a href="#L-4397"><span class="linenos">4397</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4398"><a href="#L-4398"><span class="linenos">4398</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
+</span><span id="L-4399"><a href="#L-4399"><span class="linenos">4399</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Reference</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
+</span><span id="L-4400"><a href="#L-4400"><span class="linenos">4400</span></a>
+</span><span id="L-4401"><a href="#L-4401"><span class="linenos">4401</span></a> <span class="k">def</span> <span class="nf">_parse_foreign_key</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">:</span>
+</span><span id="L-4402"><a href="#L-4402"><span class="linenos">4402</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="L-4403"><a href="#L-4403"><span class="linenos">4403</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_references</span><span class="p">()</span>
+</span><span id="L-4404"><a href="#L-4404"><span class="linenos">4404</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="L-4405"><a href="#L-4405"><span class="linenos">4405</span></a>
+</span><span id="L-4406"><a href="#L-4406"><span class="linenos">4406</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
+</span><span id="L-4407"><a href="#L-4407"><span class="linenos">4407</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">)):</span>
+</span><span id="L-4408"><a href="#L-4408"><span class="linenos">4408</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected DELETE or UPDATE&quot;</span><span class="p">)</span>
</span><span id="L-4409"><a href="#L-4409"><span class="linenos">4409</span></a>
-</span><span id="L-4410"><a href="#L-4410"><span class="linenos">4410</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4411"><a href="#L-4411"><span class="linenos">4411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">,</span>
-</span><span id="L-4412"><a href="#L-4412"><span class="linenos">4412</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-4413"><a href="#L-4413"><span class="linenos">4413</span></a> <span class="n">reference</span><span class="o">=</span><span class="n">reference</span><span class="p">,</span>
-</span><span id="L-4414"><a href="#L-4414"><span class="linenos">4414</span></a> <span class="o">**</span><span class="n">options</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="L-4415"><a href="#L-4415"><span class="linenos">4415</span></a> <span class="p">)</span>
-</span><span id="L-4416"><a href="#L-4416"><span class="linenos">4416</span></a>
-</span><span id="L-4417"><a href="#L-4417"><span class="linenos">4417</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key_part</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4418"><a href="#L-4418"><span class="linenos">4418</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="L-4419"><a href="#L-4419"><span class="linenos">4419</span></a>
-</span><span id="L-4420"><a href="#L-4420"><span class="linenos">4420</span></a> <span class="k">def</span> <span class="nf">_parse_period_for_system_time</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">]:</span>
-</span><span id="L-4421"><a href="#L-4421"><span class="linenos">4421</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
-</span><span id="L-4422"><a href="#L-4422"><span class="linenos">4422</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-4423"><a href="#L-4423"><span class="linenos">4423</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4424"><a href="#L-4424"><span class="linenos">4424</span></a>
-</span><span id="L-4425"><a href="#L-4425"><span class="linenos">4425</span></a> <span class="n">id_vars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="L-4426"><a href="#L-4426"><span class="linenos">4426</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4427"><a href="#L-4427"><span class="linenos">4427</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">,</span>
-</span><span id="L-4428"><a href="#L-4428"><span class="linenos">4428</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="L-4429"><a href="#L-4429"><span class="linenos">4429</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="L-4430"><a href="#L-4430"><span class="linenos">4430</span></a> <span class="p">)</span>
-</span><span id="L-4431"><a href="#L-4431"><span class="linenos">4431</span></a>
-</span><span id="L-4432"><a href="#L-4432"><span class="linenos">4432</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
-</span><span id="L-4433"><a href="#L-4433"><span class="linenos">4433</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-4434"><a href="#L-4434"><span class="linenos">4434</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
-</span><span id="L-4435"><a href="#L-4435"><span class="linenos">4435</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-4436"><a href="#L-4436"><span class="linenos">4436</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">))</span>
-</span><span id="L-4437"><a href="#L-4437"><span class="linenos">4437</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span>
-</span><span id="L-4438"><a href="#L-4438"><span class="linenos">4438</span></a> <span class="p">)</span>
-</span><span id="L-4439"><a href="#L-4439"><span class="linenos">4439</span></a>
-</span><span id="L-4440"><a href="#L-4440"><span class="linenos">4440</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">in_props</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-4441"><a href="#L-4441"><span class="linenos">4441</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">)</span>
-</span><span id="L-4442"><a href="#L-4442"><span class="linenos">4442</span></a>
-</span><span id="L-4443"><a href="#L-4443"><span class="linenos">4443</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span>
-</span><span id="L-4444"><a href="#L-4444"><span class="linenos">4444</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key_part</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">wrapped_optional</span>
-</span><span id="L-4445"><a href="#L-4445"><span class="linenos">4445</span></a> <span class="p">)</span>
-</span><span id="L-4446"><a href="#L-4446"><span class="linenos">4446</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
-</span><span id="L-4447"><a href="#L-4447"><span class="linenos">4447</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
-</span><span id="L-4448"><a href="#L-4448"><span class="linenos">4448</span></a>
-</span><span id="L-4449"><a href="#L-4449"><span class="linenos">4449</span></a> <span class="k">def</span> <span class="nf">_parse_bracket_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">is_map</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4450"><a href="#L-4450"><span class="linenos">4450</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span> <span class="n">explicit</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-4451"><a href="#L-4451"><span class="linenos">4451</span></a>
-</span><span id="L-4452"><a href="#L-4452"><span class="linenos">4452</span></a> <span class="k">def</span> <span class="nf">_parse_bracket</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4453"><a href="#L-4453"><span class="linenos">4453</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)):</span>
-</span><span id="L-4454"><a href="#L-4454"><span class="linenos">4454</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4410"><a href="#L-4410"><span class="linenos">4410</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="L-4411"><a href="#L-4411"><span class="linenos">4411</span></a>
+</span><span id="L-4412"><a href="#L-4412"><span class="linenos">4412</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
+</span><span id="L-4413"><a href="#L-4413"><span class="linenos">4413</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="L-4414"><a href="#L-4414"><span class="linenos">4414</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">):</span>
+</span><span id="L-4415"><a href="#L-4415"><span class="linenos">4415</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">))</span>
+</span><span id="L-4416"><a href="#L-4416"><span class="linenos">4416</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-4417"><a href="#L-4417"><span class="linenos">4417</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4418"><a href="#L-4418"><span class="linenos">4418</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-4419"><a href="#L-4419"><span class="linenos">4419</span></a> <span class="n">action</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-4420"><a href="#L-4420"><span class="linenos">4420</span></a>
+</span><span id="L-4421"><a href="#L-4421"><span class="linenos">4421</span></a> <span class="n">options</span><span class="p">[</span><span class="n">kind</span><span class="p">]</span> <span class="o">=</span> <span class="n">action</span>
+</span><span id="L-4422"><a href="#L-4422"><span class="linenos">4422</span></a>
+</span><span id="L-4423"><a href="#L-4423"><span class="linenos">4423</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4424"><a href="#L-4424"><span class="linenos">4424</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">,</span>
+</span><span id="L-4425"><a href="#L-4425"><span class="linenos">4425</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-4426"><a href="#L-4426"><span class="linenos">4426</span></a> <span class="n">reference</span><span class="o">=</span><span class="n">reference</span><span class="p">,</span>
+</span><span id="L-4427"><a href="#L-4427"><span class="linenos">4427</span></a> <span class="o">**</span><span class="n">options</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="L-4428"><a href="#L-4428"><span class="linenos">4428</span></a> <span class="p">)</span>
+</span><span id="L-4429"><a href="#L-4429"><span class="linenos">4429</span></a>
+</span><span id="L-4430"><a href="#L-4430"><span class="linenos">4430</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key_part</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4431"><a href="#L-4431"><span class="linenos">4431</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="L-4432"><a href="#L-4432"><span class="linenos">4432</span></a>
+</span><span id="L-4433"><a href="#L-4433"><span class="linenos">4433</span></a> <span class="k">def</span> <span class="nf">_parse_period_for_system_time</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">]:</span>
+</span><span id="L-4434"><a href="#L-4434"><span class="linenos">4434</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
+</span><span id="L-4435"><a href="#L-4435"><span class="linenos">4435</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-4436"><a href="#L-4436"><span class="linenos">4436</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4437"><a href="#L-4437"><span class="linenos">4437</span></a>
+</span><span id="L-4438"><a href="#L-4438"><span class="linenos">4438</span></a> <span class="n">id_vars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="L-4439"><a href="#L-4439"><span class="linenos">4439</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4440"><a href="#L-4440"><span class="linenos">4440</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">,</span>
+</span><span id="L-4441"><a href="#L-4441"><span class="linenos">4441</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="L-4442"><a href="#L-4442"><span class="linenos">4442</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="L-4443"><a href="#L-4443"><span class="linenos">4443</span></a> <span class="p">)</span>
+</span><span id="L-4444"><a href="#L-4444"><span class="linenos">4444</span></a>
+</span><span id="L-4445"><a href="#L-4445"><span class="linenos">4445</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
+</span><span id="L-4446"><a href="#L-4446"><span class="linenos">4446</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-4447"><a href="#L-4447"><span class="linenos">4447</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
+</span><span id="L-4448"><a href="#L-4448"><span class="linenos">4448</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-4449"><a href="#L-4449"><span class="linenos">4449</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">))</span>
+</span><span id="L-4450"><a href="#L-4450"><span class="linenos">4450</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span>
+</span><span id="L-4451"><a href="#L-4451"><span class="linenos">4451</span></a> <span class="p">)</span>
+</span><span id="L-4452"><a href="#L-4452"><span class="linenos">4452</span></a>
+</span><span id="L-4453"><a href="#L-4453"><span class="linenos">4453</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">in_props</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-4454"><a href="#L-4454"><span class="linenos">4454</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">)</span>
</span><span id="L-4455"><a href="#L-4455"><span class="linenos">4455</span></a>
-</span><span id="L-4456"><a href="#L-4456"><span class="linenos">4456</span></a> <span class="n">bracket_kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
-</span><span id="L-4457"><a href="#L-4457"><span class="linenos">4457</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="L-4458"><a href="#L-4458"><span class="linenos">4458</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket_key_value</span><span class="p">(</span><span class="n">is_map</span><span class="o">=</span><span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)</span>
-</span><span id="L-4459"><a href="#L-4459"><span class="linenos">4459</span></a> <span class="p">)</span>
-</span><span id="L-4460"><a href="#L-4460"><span class="linenos">4460</span></a>
-</span><span id="L-4461"><a href="#L-4461"><span class="linenos">4461</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">:</span>
-</span><span id="L-4462"><a href="#L-4462"><span class="linenos">4462</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected ]&quot;</span><span class="p">)</span>
-</span><span id="L-4463"><a href="#L-4463"><span class="linenos">4463</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
-</span><span id="L-4464"><a href="#L-4464"><span class="linenos">4464</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected }&quot;</span><span class="p">)</span>
-</span><span id="L-4465"><a href="#L-4465"><span class="linenos">4465</span></a>
-</span><span id="L-4466"><a href="#L-4466"><span class="linenos">4466</span></a> <span class="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
-</span><span id="L-4467"><a href="#L-4467"><span class="linenos">4467</span></a> <span class="k">if</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
-</span><span id="L-4468"><a href="#L-4468"><span class="linenos">4468</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-4469"><a href="#L-4469"><span class="linenos">4469</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;ARRAY&quot;</span><span class="p">:</span>
-</span><span id="L-4470"><a href="#L-4470"><span class="linenos">4470</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-4471"><a href="#L-4471"><span class="linenos">4471</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4472"><a href="#L-4472"><span class="linenos">4472</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="p">,</span> <span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</span><span class="p">)</span>
-</span><span id="L-4473"><a href="#L-4473"><span class="linenos">4473</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-4474"><a href="#L-4474"><span class="linenos">4474</span></a>
-</span><span id="L-4475"><a href="#L-4475"><span class="linenos">4475</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4476"><a href="#L-4476"><span class="linenos">4476</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4477"><a href="#L-4477"><span class="linenos">4477</span></a>
-</span><span id="L-4478"><a href="#L-4478"><span class="linenos">4478</span></a> <span class="k">def</span> <span class="nf">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4479"><a href="#L-4479"><span class="linenos">4479</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">):</span>
-</span><span id="L-4480"><a href="#L-4480"><span class="linenos">4480</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Slice</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="L-4481"><a href="#L-4481"><span class="linenos">4481</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4482"><a href="#L-4482"><span class="linenos">4482</span></a>
-</span><span id="L-4483"><a href="#L-4483"><span class="linenos">4483</span></a> <span class="k">def</span> <span class="nf">_parse_case</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4484"><a href="#L-4484"><span class="linenos">4484</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4485"><a href="#L-4485"><span class="linenos">4485</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4486"><a href="#L-4486"><span class="linenos">4486</span></a>
-</span><span id="L-4487"><a href="#L-4487"><span class="linenos">4487</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="L-4488"><a href="#L-4488"><span class="linenos">4488</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-4489"><a href="#L-4489"><span class="linenos">4489</span></a>
-</span><span id="L-4490"><a href="#L-4490"><span class="linenos">4490</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">):</span>
-</span><span id="L-4491"><a href="#L-4491"><span class="linenos">4491</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-4492"><a href="#L-4492"><span class="linenos">4492</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
-</span><span id="L-4493"><a href="#L-4493"><span class="linenos">4493</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-4494"><a href="#L-4494"><span class="linenos">4494</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">then</span><span class="p">))</span>
+</span><span id="L-4456"><a href="#L-4456"><span class="linenos">4456</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span>
+</span><span id="L-4457"><a href="#L-4457"><span class="linenos">4457</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key_part</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">wrapped_optional</span>
+</span><span id="L-4458"><a href="#L-4458"><span class="linenos">4458</span></a> <span class="p">)</span>
+</span><span id="L-4459"><a href="#L-4459"><span class="linenos">4459</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
+</span><span id="L-4460"><a href="#L-4460"><span class="linenos">4460</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
+</span><span id="L-4461"><a href="#L-4461"><span class="linenos">4461</span></a>
+</span><span id="L-4462"><a href="#L-4462"><span class="linenos">4462</span></a> <span class="k">def</span> <span class="nf">_parse_bracket_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">is_map</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4463"><a href="#L-4463"><span class="linenos">4463</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span> <span class="n">explicit</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="L-4464"><a href="#L-4464"><span class="linenos">4464</span></a>
+</span><span id="L-4465"><a href="#L-4465"><span class="linenos">4465</span></a> <span class="k">def</span> <span class="nf">_parse_bracket</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4466"><a href="#L-4466"><span class="linenos">4466</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)):</span>
+</span><span id="L-4467"><a href="#L-4467"><span class="linenos">4467</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4468"><a href="#L-4468"><span class="linenos">4468</span></a>
+</span><span id="L-4469"><a href="#L-4469"><span class="linenos">4469</span></a> <span class="n">bracket_kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="L-4470"><a href="#L-4470"><span class="linenos">4470</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="L-4471"><a href="#L-4471"><span class="linenos">4471</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket_key_value</span><span class="p">(</span><span class="n">is_map</span><span class="o">=</span><span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)</span>
+</span><span id="L-4472"><a href="#L-4472"><span class="linenos">4472</span></a> <span class="p">)</span>
+</span><span id="L-4473"><a href="#L-4473"><span class="linenos">4473</span></a>
+</span><span id="L-4474"><a href="#L-4474"><span class="linenos">4474</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">:</span>
+</span><span id="L-4475"><a href="#L-4475"><span class="linenos">4475</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected ]&quot;</span><span class="p">)</span>
+</span><span id="L-4476"><a href="#L-4476"><span class="linenos">4476</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
+</span><span id="L-4477"><a href="#L-4477"><span class="linenos">4477</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected }&quot;</span><span class="p">)</span>
+</span><span id="L-4478"><a href="#L-4478"><span class="linenos">4478</span></a>
+</span><span id="L-4479"><a href="#L-4479"><span class="linenos">4479</span></a> <span class="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
+</span><span id="L-4480"><a href="#L-4480"><span class="linenos">4480</span></a> <span class="k">if</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
+</span><span id="L-4481"><a href="#L-4481"><span class="linenos">4481</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-4482"><a href="#L-4482"><span class="linenos">4482</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;ARRAY&quot;</span><span class="p">:</span>
+</span><span id="L-4483"><a href="#L-4483"><span class="linenos">4483</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-4484"><a href="#L-4484"><span class="linenos">4484</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4485"><a href="#L-4485"><span class="linenos">4485</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="p">,</span> <span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</span><span class="p">)</span>
+</span><span id="L-4486"><a href="#L-4486"><span class="linenos">4486</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-4487"><a href="#L-4487"><span class="linenos">4487</span></a>
+</span><span id="L-4488"><a href="#L-4488"><span class="linenos">4488</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4489"><a href="#L-4489"><span class="linenos">4489</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4490"><a href="#L-4490"><span class="linenos">4490</span></a>
+</span><span id="L-4491"><a href="#L-4491"><span class="linenos">4491</span></a> <span class="k">def</span> <span class="nf">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4492"><a href="#L-4492"><span class="linenos">4492</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">):</span>
+</span><span id="L-4493"><a href="#L-4493"><span class="linenos">4493</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Slice</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="L-4494"><a href="#L-4494"><span class="linenos">4494</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-4495"><a href="#L-4495"><span class="linenos">4495</span></a>
-</span><span id="L-4496"><a href="#L-4496"><span class="linenos">4496</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">):</span>
-</span><span id="L-4497"><a href="#L-4497"><span class="linenos">4497</span></a> <span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-4498"><a href="#L-4498"><span class="linenos">4498</span></a>
-</span><span id="L-4499"><a href="#L-4499"><span class="linenos">4499</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">):</span>
-</span><span id="L-4500"><a href="#L-4500"><span class="linenos">4500</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="ow">and</span> <span class="n">default</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;END&quot;</span><span class="p">:</span>
-</span><span id="L-4501"><a href="#L-4501"><span class="linenos">4501</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;interval&quot;</span><span class="p">)</span>
-</span><span id="L-4502"><a href="#L-4502"><span class="linenos">4502</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4503"><a href="#L-4503"><span class="linenos">4503</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected END after CASE&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-4504"><a href="#L-4504"><span class="linenos">4504</span></a>
-</span><span id="L-4505"><a href="#L-4505"><span class="linenos">4505</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span>
-</span><span id="L-4506"><a href="#L-4506"><span class="linenos">4506</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span>
-</span><span id="L-4507"><a href="#L-4507"><span class="linenos">4507</span></a> <span class="p">)</span>
+</span><span id="L-4496"><a href="#L-4496"><span class="linenos">4496</span></a> <span class="k">def</span> <span class="nf">_parse_case</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4497"><a href="#L-4497"><span class="linenos">4497</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4498"><a href="#L-4498"><span class="linenos">4498</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4499"><a href="#L-4499"><span class="linenos">4499</span></a>
+</span><span id="L-4500"><a href="#L-4500"><span class="linenos">4500</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
+</span><span id="L-4501"><a href="#L-4501"><span class="linenos">4501</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-4502"><a href="#L-4502"><span class="linenos">4502</span></a>
+</span><span id="L-4503"><a href="#L-4503"><span class="linenos">4503</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">):</span>
+</span><span id="L-4504"><a href="#L-4504"><span class="linenos">4504</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-4505"><a href="#L-4505"><span class="linenos">4505</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
+</span><span id="L-4506"><a href="#L-4506"><span class="linenos">4506</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-4507"><a href="#L-4507"><span class="linenos">4507</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">then</span><span class="p">))</span>
</span><span id="L-4508"><a href="#L-4508"><span class="linenos">4508</span></a>
-</span><span id="L-4509"><a href="#L-4509"><span class="linenos">4509</span></a> <span class="k">def</span> <span class="nf">_parse_if</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4510"><a href="#L-4510"><span class="linenos">4510</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-4511"><a href="#L-4511"><span class="linenos">4511</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
-</span><span id="L-4512"><a href="#L-4512"><span class="linenos">4512</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="L-4513"><a href="#L-4513"><span class="linenos">4513</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-4514"><a href="#L-4514"><span class="linenos">4514</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4515"><a href="#L-4515"><span class="linenos">4515</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="L-4516"><a href="#L-4516"><span class="linenos">4516</span></a>
-</span><span id="L-4517"><a href="#L-4517"><span class="linenos">4517</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_IF_COMMANDS</span> <span class="ow">and</span> <span class="n">index</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-4518"><a href="#L-4518"><span class="linenos">4518</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-4519"><a href="#L-4519"><span class="linenos">4519</span></a>
-</span><span id="L-4520"><a href="#L-4520"><span class="linenos">4520</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-4509"><a href="#L-4509"><span class="linenos">4509</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">):</span>
+</span><span id="L-4510"><a href="#L-4510"><span class="linenos">4510</span></a> <span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-4511"><a href="#L-4511"><span class="linenos">4511</span></a>
+</span><span id="L-4512"><a href="#L-4512"><span class="linenos">4512</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">):</span>
+</span><span id="L-4513"><a href="#L-4513"><span class="linenos">4513</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="ow">and</span> <span class="n">default</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;END&quot;</span><span class="p">:</span>
+</span><span id="L-4514"><a href="#L-4514"><span class="linenos">4514</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;interval&quot;</span><span class="p">)</span>
+</span><span id="L-4515"><a href="#L-4515"><span class="linenos">4515</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4516"><a href="#L-4516"><span class="linenos">4516</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected END after CASE&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-4517"><a href="#L-4517"><span class="linenos">4517</span></a>
+</span><span id="L-4518"><a href="#L-4518"><span class="linenos">4518</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span>
+</span><span id="L-4519"><a href="#L-4519"><span class="linenos">4519</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span>
+</span><span id="L-4520"><a href="#L-4520"><span class="linenos">4520</span></a> <span class="p">)</span>
</span><span id="L-4521"><a href="#L-4521"><span class="linenos">4521</span></a>
-</span><span id="L-4522"><a href="#L-4522"><span class="linenos">4522</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">condition</span><span class="p">:</span>
-</span><span id="L-4523"><a href="#L-4523"><span class="linenos">4523</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-4524"><a href="#L-4524"><span class="linenos">4524</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4525"><a href="#L-4525"><span class="linenos">4525</span></a>
-</span><span id="L-4526"><a href="#L-4526"><span class="linenos">4526</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
-</span><span id="L-4527"><a href="#L-4527"><span class="linenos">4527</span></a> <span class="n">true</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-4528"><a href="#L-4528"><span class="linenos">4528</span></a> <span class="n">false</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-4529"><a href="#L-4529"><span class="linenos">4529</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
-</span><span id="L-4530"><a href="#L-4530"><span class="linenos">4530</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">true</span><span class="p">,</span> <span class="n">false</span><span class="o">=</span><span class="n">false</span><span class="p">)</span>
-</span><span id="L-4531"><a href="#L-4531"><span class="linenos">4531</span></a>
-</span><span id="L-4532"><a href="#L-4532"><span class="linenos">4532</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4533"><a href="#L-4533"><span class="linenos">4533</span></a>
-</span><span id="L-4534"><a href="#L-4534"><span class="linenos">4534</span></a> <span class="k">def</span> <span class="nf">_parse_next_value_for</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4535"><a href="#L-4535"><span class="linenos">4535</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FOR&quot;</span><span class="p">):</span>
-</span><span id="L-4536"><a href="#L-4536"><span class="linenos">4536</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-4537"><a href="#L-4537"><span class="linenos">4537</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4522"><a href="#L-4522"><span class="linenos">4522</span></a> <span class="k">def</span> <span class="nf">_parse_if</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4523"><a href="#L-4523"><span class="linenos">4523</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-4524"><a href="#L-4524"><span class="linenos">4524</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="L-4525"><a href="#L-4525"><span class="linenos">4525</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-4526"><a href="#L-4526"><span class="linenos">4526</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-4527"><a href="#L-4527"><span class="linenos">4527</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4528"><a href="#L-4528"><span class="linenos">4528</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="L-4529"><a href="#L-4529"><span class="linenos">4529</span></a>
+</span><span id="L-4530"><a href="#L-4530"><span class="linenos">4530</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_IF_COMMANDS</span> <span class="ow">and</span> <span class="n">index</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-4531"><a href="#L-4531"><span class="linenos">4531</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-4532"><a href="#L-4532"><span class="linenos">4532</span></a>
+</span><span id="L-4533"><a href="#L-4533"><span class="linenos">4533</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-4534"><a href="#L-4534"><span class="linenos">4534</span></a>
+</span><span id="L-4535"><a href="#L-4535"><span class="linenos">4535</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">condition</span><span class="p">:</span>
+</span><span id="L-4536"><a href="#L-4536"><span class="linenos">4536</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-4537"><a href="#L-4537"><span class="linenos">4537</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-4538"><a href="#L-4538"><span class="linenos">4538</span></a>
-</span><span id="L-4539"><a href="#L-4539"><span class="linenos">4539</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4540"><a href="#L-4540"><span class="linenos">4540</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</span><span class="p">,</span>
-</span><span id="L-4541"><a href="#L-4541"><span class="linenos">4541</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
-</span><span id="L-4542"><a href="#L-4542"><span class="linenos">4542</span></a> <span class="n">order</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OVER</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">),</span>
-</span><span id="L-4543"><a href="#L-4543"><span class="linenos">4543</span></a> <span class="p">)</span>
+</span><span id="L-4539"><a href="#L-4539"><span class="linenos">4539</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
+</span><span id="L-4540"><a href="#L-4540"><span class="linenos">4540</span></a> <span class="n">true</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-4541"><a href="#L-4541"><span class="linenos">4541</span></a> <span class="n">false</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-4542"><a href="#L-4542"><span class="linenos">4542</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
+</span><span id="L-4543"><a href="#L-4543"><span class="linenos">4543</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">true</span><span class="p">,</span> <span class="n">false</span><span class="o">=</span><span class="n">false</span><span class="p">)</span>
</span><span id="L-4544"><a href="#L-4544"><span class="linenos">4544</span></a>
-</span><span id="L-4545"><a href="#L-4545"><span class="linenos">4545</span></a> <span class="k">def</span> <span class="nf">_parse_extract</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span>
-</span><span id="L-4546"><a href="#L-4546"><span class="linenos">4546</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="L-4547"><a href="#L-4547"><span class="linenos">4547</span></a>
-</span><span id="L-4548"><a href="#L-4548"><span class="linenos">4548</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
-</span><span id="L-4549"><a href="#L-4549"><span class="linenos">4549</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4550"><a href="#L-4550"><span class="linenos">4550</span></a>
-</span><span id="L-4551"><a href="#L-4551"><span class="linenos">4551</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="L-4552"><a href="#L-4552"><span class="linenos">4552</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected FROM or comma after EXTRACT&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-4553"><a href="#L-4553"><span class="linenos">4553</span></a>
-</span><span id="L-4554"><a href="#L-4554"><span class="linenos">4554</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4555"><a href="#L-4555"><span class="linenos">4555</span></a>
-</span><span id="L-4556"><a href="#L-4556"><span class="linenos">4556</span></a> <span class="k">def</span> <span class="nf">_parse_any_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span>
-</span><span id="L-4557"><a href="#L-4557"><span class="linenos">4557</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
-</span><span id="L-4558"><a href="#L-4558"><span class="linenos">4558</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4559"><a href="#L-4559"><span class="linenos">4559</span></a> <span class="n">having</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4545"><a href="#L-4545"><span class="linenos">4545</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4546"><a href="#L-4546"><span class="linenos">4546</span></a>
+</span><span id="L-4547"><a href="#L-4547"><span class="linenos">4547</span></a> <span class="k">def</span> <span class="nf">_parse_next_value_for</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4548"><a href="#L-4548"><span class="linenos">4548</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FOR&quot;</span><span class="p">):</span>
+</span><span id="L-4549"><a href="#L-4549"><span class="linenos">4549</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-4550"><a href="#L-4550"><span class="linenos">4550</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4551"><a href="#L-4551"><span class="linenos">4551</span></a>
+</span><span id="L-4552"><a href="#L-4552"><span class="linenos">4552</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4553"><a href="#L-4553"><span class="linenos">4553</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</span><span class="p">,</span>
+</span><span id="L-4554"><a href="#L-4554"><span class="linenos">4554</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
+</span><span id="L-4555"><a href="#L-4555"><span class="linenos">4555</span></a> <span class="n">order</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OVER</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">),</span>
+</span><span id="L-4556"><a href="#L-4556"><span class="linenos">4556</span></a> <span class="p">)</span>
+</span><span id="L-4557"><a href="#L-4557"><span class="linenos">4557</span></a>
+</span><span id="L-4558"><a href="#L-4558"><span class="linenos">4558</span></a> <span class="k">def</span> <span class="nf">_parse_extract</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span>
+</span><span id="L-4559"><a href="#L-4559"><span class="linenos">4559</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
</span><span id="L-4560"><a href="#L-4560"><span class="linenos">4560</span></a>
-</span><span id="L-4561"><a href="#L-4561"><span class="linenos">4561</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">):</span>
-</span><span id="L-4562"><a href="#L-4562"><span class="linenos">4562</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MIN&quot;</span><span class="p">))</span>
-</span><span id="L-4563"><a href="#L-4563"><span class="linenos">4563</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span> <span class="o">==</span> <span class="s2">&quot;MAX&quot;</span>
-</span><span id="L-4564"><a href="#L-4564"><span class="linenos">4564</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-4565"><a href="#L-4565"><span class="linenos">4565</span></a>
-</span><span id="L-4566"><a href="#L-4566"><span class="linenos">4566</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">having</span><span class="o">=</span><span class="n">having</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="n">is_max</span><span class="p">)</span>
-</span><span id="L-4567"><a href="#L-4567"><span class="linenos">4567</span></a>
-</span><span id="L-4568"><a href="#L-4568"><span class="linenos">4568</span></a> <span class="k">def</span> <span class="nf">_parse_cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-4569"><a href="#L-4569"><span class="linenos">4569</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-4570"><a href="#L-4570"><span class="linenos">4570</span></a>
-</span><span id="L-4571"><a href="#L-4571"><span class="linenos">4571</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
-</span><span id="L-4572"><a href="#L-4572"><span class="linenos">4572</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="L-4573"><a href="#L-4573"><span class="linenos">4573</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="L-4574"><a href="#L-4574"><span class="linenos">4574</span></a>
-</span><span id="L-4575"><a href="#L-4575"><span class="linenos">4575</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected AS after CAST&quot;</span><span class="p">)</span>
-</span><span id="L-4576"><a href="#L-4576"><span class="linenos">4576</span></a>
-</span><span id="L-4577"><a href="#L-4577"><span class="linenos">4577</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4578"><a href="#L-4578"><span class="linenos">4578</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
-</span><span id="L-4579"><a href="#L-4579"><span class="linenos">4579</span></a>
-</span><span id="L-4580"><a href="#L-4580"><span class="linenos">4580</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">):</span>
-</span><span id="L-4581"><a href="#L-4581"><span class="linenos">4581</span></a> <span class="n">fmt_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-4582"><a href="#L-4582"><span class="linenos">4582</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="n">fmt_string</span><span class="p">)</span>
+</span><span id="L-4561"><a href="#L-4561"><span class="linenos">4561</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
+</span><span id="L-4562"><a href="#L-4562"><span class="linenos">4562</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="L-4563"><a href="#L-4563"><span class="linenos">4563</span></a>
+</span><span id="L-4564"><a href="#L-4564"><span class="linenos">4564</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="L-4565"><a href="#L-4565"><span class="linenos">4565</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected FROM or comma after EXTRACT&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-4566"><a href="#L-4566"><span class="linenos">4566</span></a>
+</span><span id="L-4567"><a href="#L-4567"><span class="linenos">4567</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="L-4568"><a href="#L-4568"><span class="linenos">4568</span></a>
+</span><span id="L-4569"><a href="#L-4569"><span class="linenos">4569</span></a> <span class="k">def</span> <span class="nf">_parse_any_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span>
+</span><span id="L-4570"><a href="#L-4570"><span class="linenos">4570</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
+</span><span id="L-4571"><a href="#L-4571"><span class="linenos">4571</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4572"><a href="#L-4572"><span class="linenos">4572</span></a> <span class="n">having</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4573"><a href="#L-4573"><span class="linenos">4573</span></a>
+</span><span id="L-4574"><a href="#L-4574"><span class="linenos">4574</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">):</span>
+</span><span id="L-4575"><a href="#L-4575"><span class="linenos">4575</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MIN&quot;</span><span class="p">))</span>
+</span><span id="L-4576"><a href="#L-4576"><span class="linenos">4576</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span> <span class="o">==</span> <span class="s2">&quot;MAX&quot;</span>
+</span><span id="L-4577"><a href="#L-4577"><span class="linenos">4577</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-4578"><a href="#L-4578"><span class="linenos">4578</span></a>
+</span><span id="L-4579"><a href="#L-4579"><span class="linenos">4579</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">having</span><span class="o">=</span><span class="n">having</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="n">is_max</span><span class="p">)</span>
+</span><span id="L-4580"><a href="#L-4580"><span class="linenos">4580</span></a>
+</span><span id="L-4581"><a href="#L-4581"><span class="linenos">4581</span></a> <span class="k">def</span> <span class="nf">_parse_cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-4582"><a href="#L-4582"><span class="linenos">4582</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
</span><span id="L-4583"><a href="#L-4583"><span class="linenos">4583</span></a>
-</span><span id="L-4584"><a href="#L-4584"><span class="linenos">4584</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="L-4585"><a href="#L-4585"><span class="linenos">4585</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
-</span><span id="L-4586"><a href="#L-4586"><span class="linenos">4586</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
-</span><span id="L-4587"><a href="#L-4587"><span class="linenos">4587</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4588"><a href="#L-4588"><span class="linenos">4588</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span>
-</span><span id="L-4589"><a href="#L-4589"><span class="linenos">4589</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-4590"><a href="#L-4590"><span class="linenos">4590</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span>
-</span><span id="L-4591"><a href="#L-4591"><span class="linenos">4591</span></a> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="L-4592"><a href="#L-4592"><span class="linenos">4592</span></a> <span class="n">fmt_string</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">fmt_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-4593"><a href="#L-4593"><span class="linenos">4593</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
-</span><span id="L-4594"><a href="#L-4594"><span class="linenos">4594</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">,</span>
-</span><span id="L-4595"><a href="#L-4595"><span class="linenos">4595</span></a> <span class="p">)</span>
-</span><span id="L-4596"><a href="#L-4596"><span class="linenos">4596</span></a> <span class="p">),</span>
-</span><span id="L-4597"><a href="#L-4597"><span class="linenos">4597</span></a> <span class="p">)</span>
-</span><span id="L-4598"><a href="#L-4598"><span class="linenos">4598</span></a>
-</span><span id="L-4599"><a href="#L-4599"><span class="linenos">4599</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fmt</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">):</span>
-</span><span id="L-4600"><a href="#L-4600"><span class="linenos">4600</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;zone&quot;</span><span class="p">])</span>
-</span><span id="L-4601"><a href="#L-4601"><span class="linenos">4601</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4602"><a href="#L-4602"><span class="linenos">4602</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="L-4603"><a href="#L-4603"><span class="linenos">4603</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected TYPE after CAST&quot;</span><span class="p">)</span>
-</span><span id="L-4604"><a href="#L-4604"><span class="linenos">4604</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="L-4605"><a href="#L-4605"><span class="linenos">4605</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4606"><a href="#L-4606"><span class="linenos">4606</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span>
-</span><span id="L-4607"><a href="#L-4607"><span class="linenos">4607</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CHARACTER_SET</span><span class="p">):</span>
-</span><span id="L-4608"><a href="#L-4608"><span class="linenos">4608</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">())</span>
-</span><span id="L-4609"><a href="#L-4609"><span class="linenos">4609</span></a>
-</span><span id="L-4610"><a href="#L-4610"><span class="linenos">4610</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4611"><a href="#L-4611"><span class="linenos">4611</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span>
-</span><span id="L-4612"><a href="#L-4612"><span class="linenos">4612</span></a> <span class="p">)</span>
-</span><span id="L-4613"><a href="#L-4613"><span class="linenos">4613</span></a>
-</span><span id="L-4614"><a href="#L-4614"><span class="linenos">4614</span></a> <span class="k">def</span> <span class="nf">_parse_string_agg</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-4615"><a href="#L-4615"><span class="linenos">4615</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
-</span><span id="L-4616"><a href="#L-4616"><span class="linenos">4616</span></a> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-4617"><a href="#L-4617"><span class="linenos">4617</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()])</span>
-</span><span id="L-4618"><a href="#L-4618"><span class="linenos">4618</span></a> <span class="p">]</span>
-</span><span id="L-4619"><a href="#L-4619"><span class="linenos">4619</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="L-4620"><a href="#L-4620"><span class="linenos">4620</span></a> <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">))</span>
-</span><span id="L-4621"><a href="#L-4621"><span class="linenos">4621</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4622"><a href="#L-4622"><span class="linenos">4622</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="L-4623"><a href="#L-4623"><span class="linenos">4623</span></a>
-</span><span id="L-4624"><a href="#L-4624"><span class="linenos">4624</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-4625"><a href="#L-4625"><span class="linenos">4625</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span> <span class="ow">and</span> <span class="n">args</span><span class="p">:</span>
-</span><span id="L-4626"><a href="#L-4626"><span class="linenos">4626</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
-</span><span id="L-4627"><a href="#L-4627"><span class="linenos">4627</span></a> <span class="c1"># bigquery: STRING_AGG([DISTINCT] expression [, separator] [ORDER BY key [{ASC | DESC}] [, ... ]] [LIMIT n])</span>
-</span><span id="L-4628"><a href="#L-4628"><span class="linenos">4628</span></a> <span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
-</span><span id="L-4629"><a href="#L-4629"><span class="linenos">4629</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">separator</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-</span><span id="L-4630"><a href="#L-4630"><span class="linenos">4630</span></a>
-</span><span id="L-4631"><a href="#L-4631"><span class="linenos">4631</span></a> <span class="c1"># Checks if we can parse an order clause: WITHIN GROUP (ORDER BY &lt;order_by_expression_list&gt; [ASC | DESC]).</span>
-</span><span id="L-4632"><a href="#L-4632"><span class="linenos">4632</span></a> <span class="c1"># This is done &quot;manually&quot;, instead of letting _parse_window parse it into an exp.WithinGroup node, so that</span>
-</span><span id="L-4633"><a href="#L-4633"><span class="linenos">4633</span></a> <span class="c1"># the STRING_AGG call is parsed like in MySQL / SQLite and can thus be transpiled more easily to them.</span>
-</span><span id="L-4634"><a href="#L-4634"><span class="linenos">4634</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
-</span><span id="L-4635"><a href="#L-4635"><span class="linenos">4635</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-4636"><a href="#L-4636"><span class="linenos">4636</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="L-4637"><a href="#L-4637"><span class="linenos">4637</span></a>
-</span><span id="L-4638"><a href="#L-4638"><span class="linenos">4638</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span> <span class="c1"># The corresponding match_r_paren will be called in parse_function (caller)</span>
-</span><span id="L-4639"><a href="#L-4639"><span class="linenos">4639</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="L-4640"><a href="#L-4640"><span class="linenos">4640</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">order</span><span class="p">,</span> <span class="n">separator</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-</span><span id="L-4641"><a href="#L-4641"><span class="linenos">4641</span></a>
-</span><span id="L-4642"><a href="#L-4642"><span class="linenos">4642</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span>
-</span><span id="L-4643"><a href="#L-4643"><span class="linenos">4643</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4644"><a href="#L-4644"><span class="linenos">4644</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4645"><a href="#L-4645"><span class="linenos">4645</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-4646"><a href="#L-4646"><span class="linenos">4646</span></a>
-</span><span id="L-4647"><a href="#L-4647"><span class="linenos">4647</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
-</span><span id="L-4648"><a href="#L-4648"><span class="linenos">4648</span></a> <span class="n">to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4649"><a href="#L-4649"><span class="linenos">4649</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
-</span><span id="L-4650"><a href="#L-4650"><span class="linenos">4650</span></a> <span class="p">)</span>
-</span><span id="L-4651"><a href="#L-4651"><span class="linenos">4651</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="L-4652"><a href="#L-4652"><span class="linenos">4652</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
-</span><span id="L-4653"><a href="#L-4653"><span class="linenos">4653</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4654"><a href="#L-4654"><span class="linenos">4654</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4655"><a href="#L-4655"><span class="linenos">4655</span></a>
-</span><span id="L-4656"><a href="#L-4656"><span class="linenos">4656</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">)</span>
-</span><span id="L-4657"><a href="#L-4657"><span class="linenos">4657</span></a>
-</span><span id="L-4658"><a href="#L-4658"><span class="linenos">4658</span></a> <span class="k">def</span> <span class="nf">_parse_decode</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Decode</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">]:</span>
-</span><span id="L-4659"><a href="#L-4659"><span class="linenos">4659</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-4660"><a href="#L-4660"><span class="linenos">4660</span></a><span class="sd"> There are generally two variants of the DECODE function:</span>
-</span><span id="L-4661"><a href="#L-4661"><span class="linenos">4661</span></a>
-</span><span id="L-4662"><a href="#L-4662"><span class="linenos">4662</span></a><span class="sd"> - DECODE(bin, charset)</span>
-</span><span id="L-4663"><a href="#L-4663"><span class="linenos">4663</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</span>
-</span><span id="L-4664"><a href="#L-4664"><span class="linenos">4664</span></a>
-</span><span id="L-4665"><a href="#L-4665"><span class="linenos">4665</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
-</span><span id="L-4666"><a href="#L-4666"><span class="linenos">4666</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
-</span><span id="L-4667"><a href="#L-4667"><span class="linenos">4667</span></a><span class="sd"> instead of relying on pattern matching.</span>
-</span><span id="L-4668"><a href="#L-4668"><span class="linenos">4668</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="L-4669"><a href="#L-4669"><span class="linenos">4669</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="L-4584"><a href="#L-4584"><span class="linenos">4584</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
+</span><span id="L-4585"><a href="#L-4585"><span class="linenos">4585</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="L-4586"><a href="#L-4586"><span class="linenos">4586</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="L-4587"><a href="#L-4587"><span class="linenos">4587</span></a>
+</span><span id="L-4588"><a href="#L-4588"><span class="linenos">4588</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected AS after CAST&quot;</span><span class="p">)</span>
+</span><span id="L-4589"><a href="#L-4589"><span class="linenos">4589</span></a>
+</span><span id="L-4590"><a href="#L-4590"><span class="linenos">4590</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4591"><a href="#L-4591"><span class="linenos">4591</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="L-4592"><a href="#L-4592"><span class="linenos">4592</span></a>
+</span><span id="L-4593"><a href="#L-4593"><span class="linenos">4593</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">):</span>
+</span><span id="L-4594"><a href="#L-4594"><span class="linenos">4594</span></a> <span class="n">fmt_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-4595"><a href="#L-4595"><span class="linenos">4595</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="n">fmt_string</span><span class="p">)</span>
+</span><span id="L-4596"><a href="#L-4596"><span class="linenos">4596</span></a>
+</span><span id="L-4597"><a href="#L-4597"><span class="linenos">4597</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="L-4598"><a href="#L-4598"><span class="linenos">4598</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
+</span><span id="L-4599"><a href="#L-4599"><span class="linenos">4599</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
+</span><span id="L-4600"><a href="#L-4600"><span class="linenos">4600</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4601"><a href="#L-4601"><span class="linenos">4601</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span>
+</span><span id="L-4602"><a href="#L-4602"><span class="linenos">4602</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4603"><a href="#L-4603"><span class="linenos">4603</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span>
+</span><span id="L-4604"><a href="#L-4604"><span class="linenos">4604</span></a> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="L-4605"><a href="#L-4605"><span class="linenos">4605</span></a> <span class="n">fmt_string</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">fmt_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-4606"><a href="#L-4606"><span class="linenos">4606</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
+</span><span id="L-4607"><a href="#L-4607"><span class="linenos">4607</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">,</span>
+</span><span id="L-4608"><a href="#L-4608"><span class="linenos">4608</span></a> <span class="p">)</span>
+</span><span id="L-4609"><a href="#L-4609"><span class="linenos">4609</span></a> <span class="p">),</span>
+</span><span id="L-4610"><a href="#L-4610"><span class="linenos">4610</span></a> <span class="p">)</span>
+</span><span id="L-4611"><a href="#L-4611"><span class="linenos">4611</span></a>
+</span><span id="L-4612"><a href="#L-4612"><span class="linenos">4612</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fmt</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">):</span>
+</span><span id="L-4613"><a href="#L-4613"><span class="linenos">4613</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;zone&quot;</span><span class="p">])</span>
+</span><span id="L-4614"><a href="#L-4614"><span class="linenos">4614</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4615"><a href="#L-4615"><span class="linenos">4615</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="L-4616"><a href="#L-4616"><span class="linenos">4616</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected TYPE after CAST&quot;</span><span class="p">)</span>
+</span><span id="L-4617"><a href="#L-4617"><span class="linenos">4617</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="L-4618"><a href="#L-4618"><span class="linenos">4618</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4619"><a href="#L-4619"><span class="linenos">4619</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span>
+</span><span id="L-4620"><a href="#L-4620"><span class="linenos">4620</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CHARACTER_SET</span><span class="p">):</span>
+</span><span id="L-4621"><a href="#L-4621"><span class="linenos">4621</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">())</span>
+</span><span id="L-4622"><a href="#L-4622"><span class="linenos">4622</span></a>
+</span><span id="L-4623"><a href="#L-4623"><span class="linenos">4623</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4624"><a href="#L-4624"><span class="linenos">4624</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span>
+</span><span id="L-4625"><a href="#L-4625"><span class="linenos">4625</span></a> <span class="p">)</span>
+</span><span id="L-4626"><a href="#L-4626"><span class="linenos">4626</span></a>
+</span><span id="L-4627"><a href="#L-4627"><span class="linenos">4627</span></a> <span class="k">def</span> <span class="nf">_parse_string_agg</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-4628"><a href="#L-4628"><span class="linenos">4628</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
+</span><span id="L-4629"><a href="#L-4629"><span class="linenos">4629</span></a> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-4630"><a href="#L-4630"><span class="linenos">4630</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()])</span>
+</span><span id="L-4631"><a href="#L-4631"><span class="linenos">4631</span></a> <span class="p">]</span>
+</span><span id="L-4632"><a href="#L-4632"><span class="linenos">4632</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="L-4633"><a href="#L-4633"><span class="linenos">4633</span></a> <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">))</span>
+</span><span id="L-4634"><a href="#L-4634"><span class="linenos">4634</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4635"><a href="#L-4635"><span class="linenos">4635</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="L-4636"><a href="#L-4636"><span class="linenos">4636</span></a>
+</span><span id="L-4637"><a href="#L-4637"><span class="linenos">4637</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-4638"><a href="#L-4638"><span class="linenos">4638</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span> <span class="ow">and</span> <span class="n">args</span><span class="p">:</span>
+</span><span id="L-4639"><a href="#L-4639"><span class="linenos">4639</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
+</span><span id="L-4640"><a href="#L-4640"><span class="linenos">4640</span></a> <span class="c1"># bigquery: STRING_AGG([DISTINCT] expression [, separator] [ORDER BY key [{ASC | DESC}] [, ... ]] [LIMIT n])</span>
+</span><span id="L-4641"><a href="#L-4641"><span class="linenos">4641</span></a> <span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
+</span><span id="L-4642"><a href="#L-4642"><span class="linenos">4642</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">separator</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
+</span><span id="L-4643"><a href="#L-4643"><span class="linenos">4643</span></a>
+</span><span id="L-4644"><a href="#L-4644"><span class="linenos">4644</span></a> <span class="c1"># Checks if we can parse an order clause: WITHIN GROUP (ORDER BY &lt;order_by_expression_list&gt; [ASC | DESC]).</span>
+</span><span id="L-4645"><a href="#L-4645"><span class="linenos">4645</span></a> <span class="c1"># This is done &quot;manually&quot;, instead of letting _parse_window parse it into an exp.WithinGroup node, so that</span>
+</span><span id="L-4646"><a href="#L-4646"><span class="linenos">4646</span></a> <span class="c1"># the STRING_AGG call is parsed like in MySQL / SQLite and can thus be transpiled more easily to them.</span>
+</span><span id="L-4647"><a href="#L-4647"><span class="linenos">4647</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
+</span><span id="L-4648"><a href="#L-4648"><span class="linenos">4648</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-4649"><a href="#L-4649"><span class="linenos">4649</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-4650"><a href="#L-4650"><span class="linenos">4650</span></a>
+</span><span id="L-4651"><a href="#L-4651"><span class="linenos">4651</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span> <span class="c1"># The corresponding match_r_paren will be called in parse_function (caller)</span>
+</span><span id="L-4652"><a href="#L-4652"><span class="linenos">4652</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="L-4653"><a href="#L-4653"><span class="linenos">4653</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">order</span><span class="p">,</span> <span class="n">separator</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
+</span><span id="L-4654"><a href="#L-4654"><span class="linenos">4654</span></a>
+</span><span id="L-4655"><a href="#L-4655"><span class="linenos">4655</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span>
+</span><span id="L-4656"><a href="#L-4656"><span class="linenos">4656</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4657"><a href="#L-4657"><span class="linenos">4657</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4658"><a href="#L-4658"><span class="linenos">4658</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-4659"><a href="#L-4659"><span class="linenos">4659</span></a>
+</span><span id="L-4660"><a href="#L-4660"><span class="linenos">4660</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
+</span><span id="L-4661"><a href="#L-4661"><span class="linenos">4661</span></a> <span class="n">to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4662"><a href="#L-4662"><span class="linenos">4662</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="L-4663"><a href="#L-4663"><span class="linenos">4663</span></a> <span class="p">)</span>
+</span><span id="L-4664"><a href="#L-4664"><span class="linenos">4664</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="L-4665"><a href="#L-4665"><span class="linenos">4665</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="L-4666"><a href="#L-4666"><span class="linenos">4666</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4667"><a href="#L-4667"><span class="linenos">4667</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4668"><a href="#L-4668"><span class="linenos">4668</span></a>
+</span><span id="L-4669"><a href="#L-4669"><span class="linenos">4669</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">)</span>
</span><span id="L-4670"><a href="#L-4670"><span class="linenos">4670</span></a>
-</span><span id="L-4671"><a href="#L-4671"><span class="linenos">4671</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">:</span>
-</span><span id="L-4672"><a href="#L-4672"><span class="linenos">4672</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">charset</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-</span><span id="L-4673"><a href="#L-4673"><span class="linenos">4673</span></a>
-</span><span id="L-4674"><a href="#L-4674"><span class="linenos">4674</span></a> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">args</span>
-</span><span id="L-4675"><a href="#L-4675"><span class="linenos">4675</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-4676"><a href="#L-4676"><span class="linenos">4676</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4671"><a href="#L-4671"><span class="linenos">4671</span></a> <span class="k">def</span> <span class="nf">_parse_decode</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Decode</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">]:</span>
+</span><span id="L-4672"><a href="#L-4672"><span class="linenos">4672</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4673"><a href="#L-4673"><span class="linenos">4673</span></a><span class="sd"> There are generally two variants of the DECODE function:</span>
+</span><span id="L-4674"><a href="#L-4674"><span class="linenos">4674</span></a>
+</span><span id="L-4675"><a href="#L-4675"><span class="linenos">4675</span></a><span class="sd"> - DECODE(bin, charset)</span>
+</span><span id="L-4676"><a href="#L-4676"><span class="linenos">4676</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</span>
</span><span id="L-4677"><a href="#L-4677"><span class="linenos">4677</span></a>
-</span><span id="L-4678"><a href="#L-4678"><span class="linenos">4678</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-4679"><a href="#L-4679"><span class="linenos">4679</span></a> <span class="k">for</span> <span class="n">search</span><span class="p">,</span> <span class="n">result</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">expressions</span><span class="p">[::</span><span class="mi">2</span><span class="p">],</span> <span class="n">expressions</span><span class="p">[</span><span class="mi">1</span><span class="p">::</span><span class="mi">2</span><span class="p">]):</span>
-</span><span id="L-4680"><a href="#L-4680"><span class="linenos">4680</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">search</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
-</span><span id="L-4681"><a href="#L-4681"><span class="linenos">4681</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4682"><a href="#L-4682"><span class="linenos">4682</span></a>
-</span><span id="L-4683"><a href="#L-4683"><span class="linenos">4683</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="L-4684"><a href="#L-4684"><span class="linenos">4684</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-4685"><a href="#L-4685"><span class="linenos">4685</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
-</span><span id="L-4686"><a href="#L-4686"><span class="linenos">4686</span></a> <span class="p">)</span>
-</span><span id="L-4687"><a href="#L-4687"><span class="linenos">4687</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">):</span>
-</span><span id="L-4688"><a href="#L-4688"><span class="linenos">4688</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-4689"><a href="#L-4689"><span class="linenos">4689</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">()),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
-</span><span id="L-4690"><a href="#L-4690"><span class="linenos">4690</span></a> <span class="p">)</span>
-</span><span id="L-4691"><a href="#L-4691"><span class="linenos">4691</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4692"><a href="#L-4692"><span class="linenos">4692</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span>
-</span><span id="L-4693"><a href="#L-4693"><span class="linenos">4693</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span>
-</span><span id="L-4694"><a href="#L-4694"><span class="linenos">4694</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
-</span><span id="L-4695"><a href="#L-4695"><span class="linenos">4695</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">()),</span>
-</span><span id="L-4696"><a href="#L-4696"><span class="linenos">4696</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">search</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">()),</span>
-</span><span id="L-4697"><a href="#L-4697"><span class="linenos">4697</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-4698"><a href="#L-4698"><span class="linenos">4698</span></a> <span class="p">),</span>
-</span><span id="L-4699"><a href="#L-4699"><span class="linenos">4699</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-4700"><a href="#L-4700"><span class="linenos">4700</span></a> <span class="p">)</span>
-</span><span id="L-4701"><a href="#L-4701"><span class="linenos">4701</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cond</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">))</span>
-</span><span id="L-4702"><a href="#L-4702"><span class="linenos">4702</span></a>
-</span><span id="L-4703"><a href="#L-4703"><span class="linenos">4703</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="L-4704"><a href="#L-4704"><span class="linenos">4704</span></a>
-</span><span id="L-4705"><a href="#L-4705"><span class="linenos">4705</span></a> <span class="k">def</span> <span class="nf">_parse_json_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">]:</span>
-</span><span id="L-4706"><a href="#L-4706"><span class="linenos">4706</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
-</span><span id="L-4707"><a href="#L-4707"><span class="linenos">4707</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-4708"><a href="#L-4708"><span class="linenos">4708</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_SEPARATOR_TOKENS</span><span class="p">)</span>
-</span><span id="L-4709"><a href="#L-4709"><span class="linenos">4709</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">)</span>
-</span><span id="L-4710"><a href="#L-4710"><span class="linenos">4710</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-4711"><a href="#L-4711"><span class="linenos">4711</span></a>
-</span><span id="L-4712"><a href="#L-4712"><span class="linenos">4712</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
-</span><span id="L-4713"><a href="#L-4713"><span class="linenos">4713</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4714"><a href="#L-4714"><span class="linenos">4714</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
+</span><span id="L-4678"><a href="#L-4678"><span class="linenos">4678</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
+</span><span id="L-4679"><a href="#L-4679"><span class="linenos">4679</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
+</span><span id="L-4680"><a href="#L-4680"><span class="linenos">4680</span></a><span class="sd"> instead of relying on pattern matching.</span>
+</span><span id="L-4681"><a href="#L-4681"><span class="linenos">4681</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="L-4682"><a href="#L-4682"><span class="linenos">4682</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="L-4683"><a href="#L-4683"><span class="linenos">4683</span></a>
+</span><span id="L-4684"><a href="#L-4684"><span class="linenos">4684</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">:</span>
+</span><span id="L-4685"><a href="#L-4685"><span class="linenos">4685</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">charset</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
+</span><span id="L-4686"><a href="#L-4686"><span class="linenos">4686</span></a>
+</span><span id="L-4687"><a href="#L-4687"><span class="linenos">4687</span></a> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">args</span>
+</span><span id="L-4688"><a href="#L-4688"><span class="linenos">4688</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-4689"><a href="#L-4689"><span class="linenos">4689</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4690"><a href="#L-4690"><span class="linenos">4690</span></a>
+</span><span id="L-4691"><a href="#L-4691"><span class="linenos">4691</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-4692"><a href="#L-4692"><span class="linenos">4692</span></a> <span class="k">for</span> <span class="n">search</span><span class="p">,</span> <span class="n">result</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">expressions</span><span class="p">[::</span><span class="mi">2</span><span class="p">],</span> <span class="n">expressions</span><span class="p">[</span><span class="mi">1</span><span class="p">::</span><span class="mi">2</span><span class="p">]):</span>
+</span><span id="L-4693"><a href="#L-4693"><span class="linenos">4693</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">search</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
+</span><span id="L-4694"><a href="#L-4694"><span class="linenos">4694</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4695"><a href="#L-4695"><span class="linenos">4695</span></a>
+</span><span id="L-4696"><a href="#L-4696"><span class="linenos">4696</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="L-4697"><a href="#L-4697"><span class="linenos">4697</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-4698"><a href="#L-4698"><span class="linenos">4698</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
+</span><span id="L-4699"><a href="#L-4699"><span class="linenos">4699</span></a> <span class="p">)</span>
+</span><span id="L-4700"><a href="#L-4700"><span class="linenos">4700</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">):</span>
+</span><span id="L-4701"><a href="#L-4701"><span class="linenos">4701</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-4702"><a href="#L-4702"><span class="linenos">4702</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">()),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
+</span><span id="L-4703"><a href="#L-4703"><span class="linenos">4703</span></a> <span class="p">)</span>
+</span><span id="L-4704"><a href="#L-4704"><span class="linenos">4704</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4705"><a href="#L-4705"><span class="linenos">4705</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span>
+</span><span id="L-4706"><a href="#L-4706"><span class="linenos">4706</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span>
+</span><span id="L-4707"><a href="#L-4707"><span class="linenos">4707</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
+</span><span id="L-4708"><a href="#L-4708"><span class="linenos">4708</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">()),</span>
+</span><span id="L-4709"><a href="#L-4709"><span class="linenos">4709</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">search</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">()),</span>
+</span><span id="L-4710"><a href="#L-4710"><span class="linenos">4710</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4711"><a href="#L-4711"><span class="linenos">4711</span></a> <span class="p">),</span>
+</span><span id="L-4712"><a href="#L-4712"><span class="linenos">4712</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-4713"><a href="#L-4713"><span class="linenos">4713</span></a> <span class="p">)</span>
+</span><span id="L-4714"><a href="#L-4714"><span class="linenos">4714</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cond</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">))</span>
</span><span id="L-4715"><a href="#L-4715"><span class="linenos">4715</span></a>
-</span><span id="L-4716"><a href="#L-4716"><span class="linenos">4716</span></a> <span class="k">def</span> <span class="nf">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4717"><a href="#L-4717"><span class="linenos">4717</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;JSON&quot;</span><span class="p">):</span>
-</span><span id="L-4718"><a href="#L-4718"><span class="linenos">4718</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4719"><a href="#L-4719"><span class="linenos">4719</span></a>
-</span><span id="L-4720"><a href="#L-4720"><span class="linenos">4720</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">FormatJson</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4721"><a href="#L-4721"><span class="linenos">4721</span></a>
-</span><span id="L-4722"><a href="#L-4722"><span class="linenos">4722</span></a> <span class="k">def</span> <span class="nf">_parse_on_handling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">on</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="n">values</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="L-4723"><a href="#L-4723"><span class="linenos">4723</span></a> <span class="c1"># Parses the &quot;X ON Y&quot; syntax, i.e. NULL ON NULL (Oracle, T-SQL)</span>
-</span><span id="L-4724"><a href="#L-4724"><span class="linenos">4724</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="L-4725"><a href="#L-4725"><span class="linenos">4725</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="n">on</span><span class="p">):</span>
-</span><span id="L-4726"><a href="#L-4726"><span class="linenos">4726</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2"> ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-4727"><a href="#L-4727"><span class="linenos">4727</span></a>
-</span><span id="L-4728"><a href="#L-4728"><span class="linenos">4728</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-4729"><a href="#L-4729"><span class="linenos">4729</span></a>
-</span><span id="L-4730"><a href="#L-4730"><span class="linenos">4730</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4731"><a href="#L-4731"><span class="linenos">4731</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">False</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">:</span>
-</span><span id="L-4732"><a href="#L-4732"><span class="linenos">4732</span></a> <span class="o">...</span>
-</span><span id="L-4733"><a href="#L-4733"><span class="linenos">4733</span></a>
-</span><span id="L-4734"><a href="#L-4734"><span class="linenos">4734</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-4735"><a href="#L-4735"><span class="linenos">4735</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">True</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">:</span>
-</span><span id="L-4736"><a href="#L-4736"><span class="linenos">4736</span></a> <span class="o">...</span>
-</span><span id="L-4737"><a href="#L-4737"><span class="linenos">4737</span></a>
-</span><span id="L-4738"><a href="#L-4738"><span class="linenos">4738</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-4739"><a href="#L-4739"><span class="linenos">4739</span></a> <span class="n">star</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
-</span><span id="L-4740"><a href="#L-4740"><span class="linenos">4740</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-4741"><a href="#L-4741"><span class="linenos">4741</span></a> <span class="p">[</span><span class="n">star</span><span class="p">]</span>
-</span><span id="L-4742"><a href="#L-4742"><span class="linenos">4742</span></a> <span class="k">if</span> <span class="n">star</span>
-</span><span id="L-4743"><a href="#L-4743"><span class="linenos">4743</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_key_value</span><span class="p">()))</span>
-</span><span id="L-4744"><a href="#L-4744"><span class="linenos">4744</span></a> <span class="p">)</span>
-</span><span id="L-4745"><a href="#L-4745"><span class="linenos">4745</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;ABSENT&quot;</span><span class="p">)</span>
+</span><span id="L-4716"><a href="#L-4716"><span class="linenos">4716</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-4717"><a href="#L-4717"><span class="linenos">4717</span></a>
+</span><span id="L-4718"><a href="#L-4718"><span class="linenos">4718</span></a> <span class="k">def</span> <span class="nf">_parse_json_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">]:</span>
+</span><span id="L-4719"><a href="#L-4719"><span class="linenos">4719</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
+</span><span id="L-4720"><a href="#L-4720"><span class="linenos">4720</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-4721"><a href="#L-4721"><span class="linenos">4721</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_SEPARATOR_TOKENS</span><span class="p">)</span>
+</span><span id="L-4722"><a href="#L-4722"><span class="linenos">4722</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">)</span>
+</span><span id="L-4723"><a href="#L-4723"><span class="linenos">4723</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-4724"><a href="#L-4724"><span class="linenos">4724</span></a>
+</span><span id="L-4725"><a href="#L-4725"><span class="linenos">4725</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
+</span><span id="L-4726"><a href="#L-4726"><span class="linenos">4726</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4727"><a href="#L-4727"><span class="linenos">4727</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
+</span><span id="L-4728"><a href="#L-4728"><span class="linenos">4728</span></a>
+</span><span id="L-4729"><a href="#L-4729"><span class="linenos">4729</span></a> <span class="k">def</span> <span class="nf">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4730"><a href="#L-4730"><span class="linenos">4730</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;JSON&quot;</span><span class="p">):</span>
+</span><span id="L-4731"><a href="#L-4731"><span class="linenos">4731</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4732"><a href="#L-4732"><span class="linenos">4732</span></a>
+</span><span id="L-4733"><a href="#L-4733"><span class="linenos">4733</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">FormatJson</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4734"><a href="#L-4734"><span class="linenos">4734</span></a>
+</span><span id="L-4735"><a href="#L-4735"><span class="linenos">4735</span></a> <span class="k">def</span> <span class="nf">_parse_on_handling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">on</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="n">values</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="L-4736"><a href="#L-4736"><span class="linenos">4736</span></a> <span class="c1"># Parses the &quot;X ON Y&quot; syntax, i.e. NULL ON NULL (Oracle, T-SQL)</span>
+</span><span id="L-4737"><a href="#L-4737"><span class="linenos">4737</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="L-4738"><a href="#L-4738"><span class="linenos">4738</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="n">on</span><span class="p">):</span>
+</span><span id="L-4739"><a href="#L-4739"><span class="linenos">4739</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2"> ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-4740"><a href="#L-4740"><span class="linenos">4740</span></a>
+</span><span id="L-4741"><a href="#L-4741"><span class="linenos">4741</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-4742"><a href="#L-4742"><span class="linenos">4742</span></a>
+</span><span id="L-4743"><a href="#L-4743"><span class="linenos">4743</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-4744"><a href="#L-4744"><span class="linenos">4744</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">False</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">:</span>
+</span><span id="L-4745"><a href="#L-4745"><span class="linenos">4745</span></a> <span class="o">...</span>
</span><span id="L-4746"><a href="#L-4746"><span class="linenos">4746</span></a>
-</span><span id="L-4747"><a href="#L-4747"><span class="linenos">4747</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4748"><a href="#L-4748"><span class="linenos">4748</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
-</span><span id="L-4749"><a href="#L-4749"><span class="linenos">4749</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-4750"><a href="#L-4750"><span class="linenos">4750</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
-</span><span id="L-4751"><a href="#L-4751"><span class="linenos">4751</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-4752"><a href="#L-4752"><span class="linenos">4752</span></a>
-</span><span id="L-4753"><a href="#L-4753"><span class="linenos">4753</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEYS&quot;</span><span class="p">)</span>
-</span><span id="L-4754"><a href="#L-4754"><span class="linenos">4754</span></a>
-</span><span id="L-4755"><a href="#L-4755"><span class="linenos">4755</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span>
-</span><span id="L-4756"><a href="#L-4756"><span class="linenos">4756</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="L-4747"><a href="#L-4747"><span class="linenos">4747</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-4748"><a href="#L-4748"><span class="linenos">4748</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">True</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">:</span>
+</span><span id="L-4749"><a href="#L-4749"><span class="linenos">4749</span></a> <span class="o">...</span>
+</span><span id="L-4750"><a href="#L-4750"><span class="linenos">4750</span></a>
+</span><span id="L-4751"><a href="#L-4751"><span class="linenos">4751</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-4752"><a href="#L-4752"><span class="linenos">4752</span></a> <span class="n">star</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="L-4753"><a href="#L-4753"><span class="linenos">4753</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-4754"><a href="#L-4754"><span class="linenos">4754</span></a> <span class="p">[</span><span class="n">star</span><span class="p">]</span>
+</span><span id="L-4755"><a href="#L-4755"><span class="linenos">4755</span></a> <span class="k">if</span> <span class="n">star</span>
+</span><span id="L-4756"><a href="#L-4756"><span class="linenos">4756</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_key_value</span><span class="p">()))</span>
</span><span id="L-4757"><a href="#L-4757"><span class="linenos">4757</span></a> <span class="p">)</span>
-</span><span id="L-4758"><a href="#L-4758"><span class="linenos">4758</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENCODING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="L-4758"><a href="#L-4758"><span class="linenos">4758</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;ABSENT&quot;</span><span class="p">)</span>
</span><span id="L-4759"><a href="#L-4759"><span class="linenos">4759</span></a>
-</span><span id="L-4760"><a href="#L-4760"><span class="linenos">4760</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4761"><a href="#L-4761"><span class="linenos">4761</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span> <span class="k">if</span> <span class="n">agg</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
-</span><span id="L-4762"><a href="#L-4762"><span class="linenos">4762</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="L-4763"><a href="#L-4763"><span class="linenos">4763</span></a> <span class="n">null_handling</span><span class="o">=</span><span class="n">null_handling</span><span class="p">,</span>
-</span><span id="L-4764"><a href="#L-4764"><span class="linenos">4764</span></a> <span class="n">unique_keys</span><span class="o">=</span><span class="n">unique_keys</span><span class="p">,</span>
-</span><span id="L-4765"><a href="#L-4765"><span class="linenos">4765</span></a> <span class="n">return_type</span><span class="o">=</span><span class="n">return_type</span><span class="p">,</span>
-</span><span id="L-4766"><a href="#L-4766"><span class="linenos">4766</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
-</span><span id="L-4767"><a href="#L-4767"><span class="linenos">4767</span></a> <span class="p">)</span>
-</span><span id="L-4768"><a href="#L-4768"><span class="linenos">4768</span></a>
-</span><span id="L-4769"><a href="#L-4769"><span class="linenos">4769</span></a> <span class="c1"># Note: this is currently incomplete; it only implements the &quot;JSON_value_column&quot; part</span>
-</span><span id="L-4770"><a href="#L-4770"><span class="linenos">4770</span></a> <span class="k">def</span> <span class="nf">_parse_json_column_def</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">:</span>
-</span><span id="L-4771"><a href="#L-4771"><span class="linenos">4771</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NESTED&quot;</span><span class="p">):</span>
-</span><span id="L-4772"><a href="#L-4772"><span class="linenos">4772</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-4773"><a href="#L-4773"><span class="linenos">4773</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-4774"><a href="#L-4774"><span class="linenos">4774</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4775"><a href="#L-4775"><span class="linenos">4775</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4776"><a href="#L-4776"><span class="linenos">4776</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4777"><a href="#L-4777"><span class="linenos">4777</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4778"><a href="#L-4778"><span class="linenos">4778</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-4779"><a href="#L-4779"><span class="linenos">4779</span></a>
-</span><span id="L-4780"><a href="#L-4780"><span class="linenos">4780</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATH&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-4781"><a href="#L-4781"><span class="linenos">4781</span></a> <span class="n">nested_schema</span> <span class="o">=</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
-</span><span id="L-4782"><a href="#L-4782"><span class="linenos">4782</span></a>
-</span><span id="L-4783"><a href="#L-4783"><span class="linenos">4783</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4784"><a href="#L-4784"><span class="linenos">4784</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">,</span>
-</span><span id="L-4785"><a href="#L-4785"><span class="linenos">4785</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-4786"><a href="#L-4786"><span class="linenos">4786</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-4787"><a href="#L-4787"><span class="linenos">4787</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="L-4788"><a href="#L-4788"><span class="linenos">4788</span></a> <span class="n">nested_schema</span><span class="o">=</span><span class="n">nested_schema</span><span class="p">,</span>
-</span><span id="L-4789"><a href="#L-4789"><span class="linenos">4789</span></a> <span class="p">)</span>
-</span><span id="L-4790"><a href="#L-4790"><span class="linenos">4790</span></a>
-</span><span id="L-4791"><a href="#L-4791"><span class="linenos">4791</span></a> <span class="k">def</span> <span class="nf">_parse_json_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">:</span>
-</span><span id="L-4792"><a href="#L-4792"><span class="linenos">4792</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span>
-</span><span id="L-4793"><a href="#L-4793"><span class="linenos">4793</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4794"><a href="#L-4794"><span class="linenos">4794</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">,</span>
-</span><span id="L-4795"><a href="#L-4795"><span class="linenos">4795</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_column_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="L-4796"><a href="#L-4796"><span class="linenos">4796</span></a> <span class="p">)</span>
-</span><span id="L-4797"><a href="#L-4797"><span class="linenos">4797</span></a>
-</span><span id="L-4798"><a href="#L-4798"><span class="linenos">4798</span></a> <span class="k">def</span> <span class="nf">_parse_json_table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">:</span>
-</span><span id="L-4799"><a href="#L-4799"><span class="linenos">4799</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4800"><a href="#L-4800"><span class="linenos">4800</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-4801"><a href="#L-4801"><span class="linenos">4801</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
-</span><span id="L-4802"><a href="#L-4802"><span class="linenos">4802</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
-</span><span id="L-4803"><a href="#L-4803"><span class="linenos">4803</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
-</span><span id="L-4804"><a href="#L-4804"><span class="linenos">4804</span></a>
-</span><span id="L-4805"><a href="#L-4805"><span class="linenos">4805</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">(</span>
-</span><span id="L-4806"><a href="#L-4806"><span class="linenos">4806</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-4807"><a href="#L-4807"><span class="linenos">4807</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
-</span><span id="L-4808"><a href="#L-4808"><span class="linenos">4808</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="L-4809"><a href="#L-4809"><span class="linenos">4809</span></a> <span class="n">error_handling</span><span class="o">=</span><span class="n">error_handling</span><span class="p">,</span>
-</span><span id="L-4810"><a href="#L-4810"><span class="linenos">4810</span></a> <span class="n">empty_handling</span><span class="o">=</span><span class="n">empty_handling</span><span class="p">,</span>
-</span><span id="L-4811"><a href="#L-4811"><span class="linenos">4811</span></a> <span class="p">)</span>
-</span><span id="L-4812"><a href="#L-4812"><span class="linenos">4812</span></a>
-</span><span id="L-4813"><a href="#L-4813"><span class="linenos">4813</span></a> <span class="k">def</span> <span class="nf">_parse_match_against</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">:</span>
-</span><span id="L-4814"><a href="#L-4814"><span class="linenos">4814</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="L-4815"><a href="#L-4815"><span class="linenos">4815</span></a>
-</span><span id="L-4816"><a href="#L-4816"><span class="linenos">4816</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">,</span> <span class="s2">&quot;AGAINST&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">)</span>
+</span><span id="L-4760"><a href="#L-4760"><span class="linenos">4760</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4761"><a href="#L-4761"><span class="linenos">4761</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
+</span><span id="L-4762"><a href="#L-4762"><span class="linenos">4762</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-4763"><a href="#L-4763"><span class="linenos">4763</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
+</span><span id="L-4764"><a href="#L-4764"><span class="linenos">4764</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-4765"><a href="#L-4765"><span class="linenos">4765</span></a>
+</span><span id="L-4766"><a href="#L-4766"><span class="linenos">4766</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEYS&quot;</span><span class="p">)</span>
+</span><span id="L-4767"><a href="#L-4767"><span class="linenos">4767</span></a>
+</span><span id="L-4768"><a href="#L-4768"><span class="linenos">4768</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span>
+</span><span id="L-4769"><a href="#L-4769"><span class="linenos">4769</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="L-4770"><a href="#L-4770"><span class="linenos">4770</span></a> <span class="p">)</span>
+</span><span id="L-4771"><a href="#L-4771"><span class="linenos">4771</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENCODING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="L-4772"><a href="#L-4772"><span class="linenos">4772</span></a>
+</span><span id="L-4773"><a href="#L-4773"><span class="linenos">4773</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4774"><a href="#L-4774"><span class="linenos">4774</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span> <span class="k">if</span> <span class="n">agg</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
+</span><span id="L-4775"><a href="#L-4775"><span class="linenos">4775</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="L-4776"><a href="#L-4776"><span class="linenos">4776</span></a> <span class="n">null_handling</span><span class="o">=</span><span class="n">null_handling</span><span class="p">,</span>
+</span><span id="L-4777"><a href="#L-4777"><span class="linenos">4777</span></a> <span class="n">unique_keys</span><span class="o">=</span><span class="n">unique_keys</span><span class="p">,</span>
+</span><span id="L-4778"><a href="#L-4778"><span class="linenos">4778</span></a> <span class="n">return_type</span><span class="o">=</span><span class="n">return_type</span><span class="p">,</span>
+</span><span id="L-4779"><a href="#L-4779"><span class="linenos">4779</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
+</span><span id="L-4780"><a href="#L-4780"><span class="linenos">4780</span></a> <span class="p">)</span>
+</span><span id="L-4781"><a href="#L-4781"><span class="linenos">4781</span></a>
+</span><span id="L-4782"><a href="#L-4782"><span class="linenos">4782</span></a> <span class="c1"># Note: this is currently incomplete; it only implements the &quot;JSON_value_column&quot; part</span>
+</span><span id="L-4783"><a href="#L-4783"><span class="linenos">4783</span></a> <span class="k">def</span> <span class="nf">_parse_json_column_def</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">:</span>
+</span><span id="L-4784"><a href="#L-4784"><span class="linenos">4784</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NESTED&quot;</span><span class="p">):</span>
+</span><span id="L-4785"><a href="#L-4785"><span class="linenos">4785</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-4786"><a href="#L-4786"><span class="linenos">4786</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-4787"><a href="#L-4787"><span class="linenos">4787</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4788"><a href="#L-4788"><span class="linenos">4788</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4789"><a href="#L-4789"><span class="linenos">4789</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4790"><a href="#L-4790"><span class="linenos">4790</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4791"><a href="#L-4791"><span class="linenos">4791</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-4792"><a href="#L-4792"><span class="linenos">4792</span></a>
+</span><span id="L-4793"><a href="#L-4793"><span class="linenos">4793</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATH&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-4794"><a href="#L-4794"><span class="linenos">4794</span></a> <span class="n">nested_schema</span> <span class="o">=</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
+</span><span id="L-4795"><a href="#L-4795"><span class="linenos">4795</span></a>
+</span><span id="L-4796"><a href="#L-4796"><span class="linenos">4796</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4797"><a href="#L-4797"><span class="linenos">4797</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">,</span>
+</span><span id="L-4798"><a href="#L-4798"><span class="linenos">4798</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4799"><a href="#L-4799"><span class="linenos">4799</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-4800"><a href="#L-4800"><span class="linenos">4800</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="L-4801"><a href="#L-4801"><span class="linenos">4801</span></a> <span class="n">nested_schema</span><span class="o">=</span><span class="n">nested_schema</span><span class="p">,</span>
+</span><span id="L-4802"><a href="#L-4802"><span class="linenos">4802</span></a> <span class="p">)</span>
+</span><span id="L-4803"><a href="#L-4803"><span class="linenos">4803</span></a>
+</span><span id="L-4804"><a href="#L-4804"><span class="linenos">4804</span></a> <span class="k">def</span> <span class="nf">_parse_json_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">:</span>
+</span><span id="L-4805"><a href="#L-4805"><span class="linenos">4805</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span>
+</span><span id="L-4806"><a href="#L-4806"><span class="linenos">4806</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4807"><a href="#L-4807"><span class="linenos">4807</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">,</span>
+</span><span id="L-4808"><a href="#L-4808"><span class="linenos">4808</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_column_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="L-4809"><a href="#L-4809"><span class="linenos">4809</span></a> <span class="p">)</span>
+</span><span id="L-4810"><a href="#L-4810"><span class="linenos">4810</span></a>
+</span><span id="L-4811"><a href="#L-4811"><span class="linenos">4811</span></a> <span class="k">def</span> <span class="nf">_parse_json_table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">:</span>
+</span><span id="L-4812"><a href="#L-4812"><span class="linenos">4812</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="L-4813"><a href="#L-4813"><span class="linenos">4813</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-4814"><a href="#L-4814"><span class="linenos">4814</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
+</span><span id="L-4815"><a href="#L-4815"><span class="linenos">4815</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
+</span><span id="L-4816"><a href="#L-4816"><span class="linenos">4816</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
</span><span id="L-4817"><a href="#L-4817"><span class="linenos">4817</span></a>
-</span><span id="L-4818"><a href="#L-4818"><span class="linenos">4818</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-4819"><a href="#L-4819"><span class="linenos">4819</span></a>
-</span><span id="L-4820"><a href="#L-4820"><span class="linenos">4820</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;NATURAL&quot;</span><span class="p">,</span> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
-</span><span id="L-4821"><a href="#L-4821"><span class="linenos">4821</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN NATURAL LANGUAGE MODE&quot;</span>
-</span><span id="L-4822"><a href="#L-4822"><span class="linenos">4822</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
-</span><span id="L-4823"><a href="#L-4823"><span class="linenos">4823</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2"> WITH QUERY EXPANSION&quot;</span>
-</span><span id="L-4824"><a href="#L-4824"><span class="linenos">4824</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
-</span><span id="L-4825"><a href="#L-4825"><span class="linenos">4825</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
-</span><span id="L-4826"><a href="#L-4826"><span class="linenos">4826</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
-</span><span id="L-4827"><a href="#L-4827"><span class="linenos">4827</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
-</span><span id="L-4828"><a href="#L-4828"><span class="linenos">4828</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4829"><a href="#L-4829"><span class="linenos">4829</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4818"><a href="#L-4818"><span class="linenos">4818</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">(</span>
+</span><span id="L-4819"><a href="#L-4819"><span class="linenos">4819</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4820"><a href="#L-4820"><span class="linenos">4820</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
+</span><span id="L-4821"><a href="#L-4821"><span class="linenos">4821</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="L-4822"><a href="#L-4822"><span class="linenos">4822</span></a> <span class="n">error_handling</span><span class="o">=</span><span class="n">error_handling</span><span class="p">,</span>
+</span><span id="L-4823"><a href="#L-4823"><span class="linenos">4823</span></a> <span class="n">empty_handling</span><span class="o">=</span><span class="n">empty_handling</span><span class="p">,</span>
+</span><span id="L-4824"><a href="#L-4824"><span class="linenos">4824</span></a> <span class="p">)</span>
+</span><span id="L-4825"><a href="#L-4825"><span class="linenos">4825</span></a>
+</span><span id="L-4826"><a href="#L-4826"><span class="linenos">4826</span></a> <span class="k">def</span> <span class="nf">_parse_match_against</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">:</span>
+</span><span id="L-4827"><a href="#L-4827"><span class="linenos">4827</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="L-4828"><a href="#L-4828"><span class="linenos">4828</span></a>
+</span><span id="L-4829"><a href="#L-4829"><span class="linenos">4829</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">,</span> <span class="s2">&quot;AGAINST&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">)</span>
</span><span id="L-4830"><a href="#L-4830"><span class="linenos">4830</span></a>
-</span><span id="L-4831"><a href="#L-4831"><span class="linenos">4831</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4832"><a href="#L-4832"><span class="linenos">4832</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">modifier</span><span class="o">=</span><span class="n">modifier</span>
-</span><span id="L-4833"><a href="#L-4833"><span class="linenos">4833</span></a> <span class="p">)</span>
-</span><span id="L-4834"><a href="#L-4834"><span class="linenos">4834</span></a>
-</span><span id="L-4835"><a href="#L-4835"><span class="linenos">4835</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver16</span>
-</span><span id="L-4836"><a href="#L-4836"><span class="linenos">4836</span></a> <span class="k">def</span> <span class="nf">_parse_open_json</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">:</span>
-</span><span id="L-4837"><a href="#L-4837"><span class="linenos">4837</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-4838"><a href="#L-4838"><span class="linenos">4838</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-4839"><a href="#L-4839"><span class="linenos">4839</span></a>
-</span><span id="L-4840"><a href="#L-4840"><span class="linenos">4840</span></a> <span class="k">def</span> <span class="nf">_parse_open_json_column_def</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">:</span>
-</span><span id="L-4841"><a href="#L-4841"><span class="linenos">4841</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4842"><a href="#L-4842"><span class="linenos">4842</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
-</span><span id="L-4843"><a href="#L-4843"><span class="linenos">4843</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-4844"><a href="#L-4844"><span class="linenos">4844</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">)</span>
-</span><span id="L-4845"><a href="#L-4845"><span class="linenos">4845</span></a>
-</span><span id="L-4846"><a href="#L-4846"><span class="linenos">4846</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4847"><a href="#L-4847"><span class="linenos">4847</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">as_json</span><span class="o">=</span><span class="n">as_json</span>
-</span><span id="L-4848"><a href="#L-4848"><span class="linenos">4848</span></a> <span class="p">)</span>
-</span><span id="L-4849"><a href="#L-4849"><span class="linenos">4849</span></a>
-</span><span id="L-4850"><a href="#L-4850"><span class="linenos">4850</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4851"><a href="#L-4851"><span class="linenos">4851</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
-</span><span id="L-4852"><a href="#L-4852"><span class="linenos">4852</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="L-4853"><a href="#L-4853"><span class="linenos">4853</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_open_json_column_def</span><span class="p">)</span>
-</span><span id="L-4854"><a href="#L-4854"><span class="linenos">4854</span></a>
-</span><span id="L-4855"><a href="#L-4855"><span class="linenos">4855</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-4856"><a href="#L-4856"><span class="linenos">4856</span></a>
-</span><span id="L-4857"><a href="#L-4857"><span class="linenos">4857</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
-</span><span id="L-4858"><a href="#L-4858"><span class="linenos">4858</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
-</span><span id="L-4859"><a href="#L-4859"><span class="linenos">4859</span></a>
-</span><span id="L-4860"><a href="#L-4860"><span class="linenos">4860</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
-</span><span id="L-4861"><a href="#L-4861"><span class="linenos">4861</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4862"><a href="#L-4862"><span class="linenos">4862</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="L-4863"><a href="#L-4863"><span class="linenos">4863</span></a> <span class="p">)</span>
-</span><span id="L-4864"><a href="#L-4864"><span class="linenos">4864</span></a>
-</span><span id="L-4865"><a href="#L-4865"><span class="linenos">4865</span></a> <span class="k">if</span> <span class="n">haystack_first</span><span class="p">:</span>
-</span><span id="L-4866"><a href="#L-4866"><span class="linenos">4866</span></a> <span class="n">haystack</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="L-4867"><a href="#L-4867"><span class="linenos">4867</span></a> <span class="n">needle</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-4868"><a href="#L-4868"><span class="linenos">4868</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4869"><a href="#L-4869"><span class="linenos">4869</span></a> <span class="n">needle</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="L-4870"><a href="#L-4870"><span class="linenos">4870</span></a> <span class="n">haystack</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-4871"><a href="#L-4871"><span class="linenos">4871</span></a>
-</span><span id="L-4872"><a href="#L-4872"><span class="linenos">4872</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4873"><a href="#L-4873"><span class="linenos">4873</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">haystack</span><span class="p">,</span> <span class="n">substr</span><span class="o">=</span><span class="n">needle</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
-</span><span id="L-4874"><a href="#L-4874"><span class="linenos">4874</span></a> <span class="p">)</span>
-</span><span id="L-4875"><a href="#L-4875"><span class="linenos">4875</span></a>
-</span><span id="L-4876"><a href="#L-4876"><span class="linenos">4876</span></a> <span class="k">def</span> <span class="nf">_parse_predict</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">:</span>
-</span><span id="L-4877"><a href="#L-4877"><span class="linenos">4877</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MODEL&quot;</span><span class="p">)</span>
-</span><span id="L-4878"><a href="#L-4878"><span class="linenos">4878</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="L-4879"><a href="#L-4879"><span class="linenos">4879</span></a>
-</span><span id="L-4880"><a href="#L-4880"><span class="linenos">4880</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
-</span><span id="L-4881"><a href="#L-4881"><span class="linenos">4881</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">)</span>
-</span><span id="L-4882"><a href="#L-4882"><span class="linenos">4882</span></a>
-</span><span id="L-4883"><a href="#L-4883"><span class="linenos">4883</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4884"><a href="#L-4884"><span class="linenos">4884</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">,</span>
-</span><span id="L-4885"><a href="#L-4885"><span class="linenos">4885</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-4886"><a href="#L-4886"><span class="linenos">4886</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
-</span><span id="L-4887"><a href="#L-4887"><span class="linenos">4887</span></a> <span class="n">params_struct</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="L-4888"><a href="#L-4888"><span class="linenos">4888</span></a> <span class="p">)</span>
-</span><span id="L-4889"><a href="#L-4889"><span class="linenos">4889</span></a>
-</span><span id="L-4890"><a href="#L-4890"><span class="linenos">4890</span></a> <span class="k">def</span> <span class="nf">_parse_join_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">:</span>
-</span><span id="L-4891"><a href="#L-4891"><span class="linenos">4891</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">)</span>
-</span><span id="L-4892"><a href="#L-4892"><span class="linenos">4892</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">func_name</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-4893"><a href="#L-4893"><span class="linenos">4893</span></a>
-</span><span id="L-4894"><a href="#L-4894"><span class="linenos">4894</span></a> <span class="k">def</span> <span class="nf">_parse_substring</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span>
-</span><span id="L-4895"><a href="#L-4895"><span class="linenos">4895</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
-</span><span id="L-4896"><a href="#L-4896"><span class="linenos">4896</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
-</span><span id="L-4897"><a href="#L-4897"><span class="linenos">4897</span></a>
-</span><span id="L-4898"><a href="#L-4898"><span class="linenos">4898</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">))</span>
-</span><span id="L-4899"><a href="#L-4899"><span class="linenos">4899</span></a>
-</span><span id="L-4900"><a href="#L-4900"><span class="linenos">4900</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
-</span><span id="L-4901"><a href="#L-4901"><span class="linenos">4901</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4902"><a href="#L-4902"><span class="linenos">4902</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
-</span><span id="L-4903"><a href="#L-4903"><span class="linenos">4903</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="L-4904"><a href="#L-4904"><span class="linenos">4904</span></a>
-</span><span id="L-4905"><a href="#L-4905"><span class="linenos">4905</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-4831"><a href="#L-4831"><span class="linenos">4831</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-4832"><a href="#L-4832"><span class="linenos">4832</span></a>
+</span><span id="L-4833"><a href="#L-4833"><span class="linenos">4833</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;NATURAL&quot;</span><span class="p">,</span> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
+</span><span id="L-4834"><a href="#L-4834"><span class="linenos">4834</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN NATURAL LANGUAGE MODE&quot;</span>
+</span><span id="L-4835"><a href="#L-4835"><span class="linenos">4835</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
+</span><span id="L-4836"><a href="#L-4836"><span class="linenos">4836</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2"> WITH QUERY EXPANSION&quot;</span>
+</span><span id="L-4837"><a href="#L-4837"><span class="linenos">4837</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
+</span><span id="L-4838"><a href="#L-4838"><span class="linenos">4838</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
+</span><span id="L-4839"><a href="#L-4839"><span class="linenos">4839</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
+</span><span id="L-4840"><a href="#L-4840"><span class="linenos">4840</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
+</span><span id="L-4841"><a href="#L-4841"><span class="linenos">4841</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4842"><a href="#L-4842"><span class="linenos">4842</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4843"><a href="#L-4843"><span class="linenos">4843</span></a>
+</span><span id="L-4844"><a href="#L-4844"><span class="linenos">4844</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4845"><a href="#L-4845"><span class="linenos">4845</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">modifier</span><span class="o">=</span><span class="n">modifier</span>
+</span><span id="L-4846"><a href="#L-4846"><span class="linenos">4846</span></a> <span class="p">)</span>
+</span><span id="L-4847"><a href="#L-4847"><span class="linenos">4847</span></a>
+</span><span id="L-4848"><a href="#L-4848"><span class="linenos">4848</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver16</span>
+</span><span id="L-4849"><a href="#L-4849"><span class="linenos">4849</span></a> <span class="k">def</span> <span class="nf">_parse_open_json</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">:</span>
+</span><span id="L-4850"><a href="#L-4850"><span class="linenos">4850</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-4851"><a href="#L-4851"><span class="linenos">4851</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-4852"><a href="#L-4852"><span class="linenos">4852</span></a>
+</span><span id="L-4853"><a href="#L-4853"><span class="linenos">4853</span></a> <span class="k">def</span> <span class="nf">_parse_open_json_column_def</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">:</span>
+</span><span id="L-4854"><a href="#L-4854"><span class="linenos">4854</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4855"><a href="#L-4855"><span class="linenos">4855</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="L-4856"><a href="#L-4856"><span class="linenos">4856</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-4857"><a href="#L-4857"><span class="linenos">4857</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">)</span>
+</span><span id="L-4858"><a href="#L-4858"><span class="linenos">4858</span></a>
+</span><span id="L-4859"><a href="#L-4859"><span class="linenos">4859</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4860"><a href="#L-4860"><span class="linenos">4860</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">as_json</span><span class="o">=</span><span class="n">as_json</span>
+</span><span id="L-4861"><a href="#L-4861"><span class="linenos">4861</span></a> <span class="p">)</span>
+</span><span id="L-4862"><a href="#L-4862"><span class="linenos">4862</span></a>
+</span><span id="L-4863"><a href="#L-4863"><span class="linenos">4863</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4864"><a href="#L-4864"><span class="linenos">4864</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
+</span><span id="L-4865"><a href="#L-4865"><span class="linenos">4865</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="L-4866"><a href="#L-4866"><span class="linenos">4866</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_open_json_column_def</span><span class="p">)</span>
+</span><span id="L-4867"><a href="#L-4867"><span class="linenos">4867</span></a>
+</span><span id="L-4868"><a href="#L-4868"><span class="linenos">4868</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-4869"><a href="#L-4869"><span class="linenos">4869</span></a>
+</span><span id="L-4870"><a href="#L-4870"><span class="linenos">4870</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
+</span><span id="L-4871"><a href="#L-4871"><span class="linenos">4871</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="L-4872"><a href="#L-4872"><span class="linenos">4872</span></a>
+</span><span id="L-4873"><a href="#L-4873"><span class="linenos">4873</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
+</span><span id="L-4874"><a href="#L-4874"><span class="linenos">4874</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4875"><a href="#L-4875"><span class="linenos">4875</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-4876"><a href="#L-4876"><span class="linenos">4876</span></a> <span class="p">)</span>
+</span><span id="L-4877"><a href="#L-4877"><span class="linenos">4877</span></a>
+</span><span id="L-4878"><a href="#L-4878"><span class="linenos">4878</span></a> <span class="k">if</span> <span class="n">haystack_first</span><span class="p">:</span>
+</span><span id="L-4879"><a href="#L-4879"><span class="linenos">4879</span></a> <span class="n">haystack</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-4880"><a href="#L-4880"><span class="linenos">4880</span></a> <span class="n">needle</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-4881"><a href="#L-4881"><span class="linenos">4881</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-4882"><a href="#L-4882"><span class="linenos">4882</span></a> <span class="n">needle</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="L-4883"><a href="#L-4883"><span class="linenos">4883</span></a> <span class="n">haystack</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-4884"><a href="#L-4884"><span class="linenos">4884</span></a>
+</span><span id="L-4885"><a href="#L-4885"><span class="linenos">4885</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4886"><a href="#L-4886"><span class="linenos">4886</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">haystack</span><span class="p">,</span> <span class="n">substr</span><span class="o">=</span><span class="n">needle</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
+</span><span id="L-4887"><a href="#L-4887"><span class="linenos">4887</span></a> <span class="p">)</span>
+</span><span id="L-4888"><a href="#L-4888"><span class="linenos">4888</span></a>
+</span><span id="L-4889"><a href="#L-4889"><span class="linenos">4889</span></a> <span class="k">def</span> <span class="nf">_parse_predict</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">:</span>
+</span><span id="L-4890"><a href="#L-4890"><span class="linenos">4890</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MODEL&quot;</span><span class="p">)</span>
+</span><span id="L-4891"><a href="#L-4891"><span class="linenos">4891</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="L-4892"><a href="#L-4892"><span class="linenos">4892</span></a>
+</span><span id="L-4893"><a href="#L-4893"><span class="linenos">4893</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
+</span><span id="L-4894"><a href="#L-4894"><span class="linenos">4894</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">)</span>
+</span><span id="L-4895"><a href="#L-4895"><span class="linenos">4895</span></a>
+</span><span id="L-4896"><a href="#L-4896"><span class="linenos">4896</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4897"><a href="#L-4897"><span class="linenos">4897</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">,</span>
+</span><span id="L-4898"><a href="#L-4898"><span class="linenos">4898</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-4899"><a href="#L-4899"><span class="linenos">4899</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
+</span><span id="L-4900"><a href="#L-4900"><span class="linenos">4900</span></a> <span class="n">params_struct</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="L-4901"><a href="#L-4901"><span class="linenos">4901</span></a> <span class="p">)</span>
+</span><span id="L-4902"><a href="#L-4902"><span class="linenos">4902</span></a>
+</span><span id="L-4903"><a href="#L-4903"><span class="linenos">4903</span></a> <span class="k">def</span> <span class="nf">_parse_join_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">:</span>
+</span><span id="L-4904"><a href="#L-4904"><span class="linenos">4904</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">)</span>
+</span><span id="L-4905"><a href="#L-4905"><span class="linenos">4905</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">func_name</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
</span><span id="L-4906"><a href="#L-4906"><span class="linenos">4906</span></a>
-</span><span id="L-4907"><a href="#L-4907"><span class="linenos">4907</span></a> <span class="k">def</span> <span class="nf">_parse_trim</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span>
-</span><span id="L-4908"><a href="#L-4908"><span class="linenos">4908</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
-</span><span id="L-4909"><a href="#L-4909"><span class="linenos">4909</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
+</span><span id="L-4907"><a href="#L-4907"><span class="linenos">4907</span></a> <span class="k">def</span> <span class="nf">_parse_substring</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span>
+</span><span id="L-4908"><a href="#L-4908"><span class="linenos">4908</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
+</span><span id="L-4909"><a href="#L-4909"><span class="linenos">4909</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
</span><span id="L-4910"><a href="#L-4910"><span class="linenos">4910</span></a>
-</span><span id="L-4911"><a href="#L-4911"><span class="linenos">4911</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4912"><a href="#L-4912"><span class="linenos">4912</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4913"><a href="#L-4913"><span class="linenos">4913</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4914"><a href="#L-4914"><span class="linenos">4914</span></a>
-</span><span id="L-4915"><a href="#L-4915"><span class="linenos">4915</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRIM_TYPES</span><span class="p">):</span>
-</span><span id="L-4916"><a href="#L-4916"><span class="linenos">4916</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-4911"><a href="#L-4911"><span class="linenos">4911</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">))</span>
+</span><span id="L-4912"><a href="#L-4912"><span class="linenos">4912</span></a>
+</span><span id="L-4913"><a href="#L-4913"><span class="linenos">4913</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
+</span><span id="L-4914"><a href="#L-4914"><span class="linenos">4914</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="L-4915"><a href="#L-4915"><span class="linenos">4915</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
+</span><span id="L-4916"><a href="#L-4916"><span class="linenos">4916</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="L-4917"><a href="#L-4917"><span class="linenos">4917</span></a>
-</span><span id="L-4918"><a href="#L-4918"><span class="linenos">4918</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-4919"><a href="#L-4919"><span class="linenos">4919</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)):</span>
-</span><span id="L-4920"><a href="#L-4920"><span class="linenos">4920</span></a> <span class="n">invert_order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRIM_PATTERN_FIRST</span>
-</span><span id="L-4921"><a href="#L-4921"><span class="linenos">4921</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-4922"><a href="#L-4922"><span class="linenos">4922</span></a>
-</span><span id="L-4923"><a href="#L-4923"><span class="linenos">4923</span></a> <span class="k">if</span> <span class="n">invert_order</span><span class="p">:</span>
-</span><span id="L-4924"><a href="#L-4924"><span class="linenos">4924</span></a> <span class="n">this</span><span class="p">,</span> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="p">,</span> <span class="n">this</span>
-</span><span id="L-4925"><a href="#L-4925"><span class="linenos">4925</span></a>
-</span><span id="L-4926"><a href="#L-4926"><span class="linenos">4926</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">):</span>
-</span><span id="L-4927"><a href="#L-4927"><span class="linenos">4927</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-4928"><a href="#L-4928"><span class="linenos">4928</span></a>
-</span><span id="L-4929"><a href="#L-4929"><span class="linenos">4929</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4930"><a href="#L-4930"><span class="linenos">4930</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">collation</span><span class="o">=</span><span class="n">collation</span>
-</span><span id="L-4931"><a href="#L-4931"><span class="linenos">4931</span></a> <span class="p">)</span>
-</span><span id="L-4932"><a href="#L-4932"><span class="linenos">4932</span></a>
-</span><span id="L-4933"><a href="#L-4933"><span class="linenos">4933</span></a> <span class="k">def</span> <span class="nf">_parse_window_clause</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="L-4934"><a href="#L-4934"><span class="linenos">4934</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_named_window</span><span class="p">)</span>
+</span><span id="L-4918"><a href="#L-4918"><span class="linenos">4918</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="L-4919"><a href="#L-4919"><span class="linenos">4919</span></a>
+</span><span id="L-4920"><a href="#L-4920"><span class="linenos">4920</span></a> <span class="k">def</span> <span class="nf">_parse_trim</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span>
+</span><span id="L-4921"><a href="#L-4921"><span class="linenos">4921</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
+</span><span id="L-4922"><a href="#L-4922"><span class="linenos">4922</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
+</span><span id="L-4923"><a href="#L-4923"><span class="linenos">4923</span></a>
+</span><span id="L-4924"><a href="#L-4924"><span class="linenos">4924</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4925"><a href="#L-4925"><span class="linenos">4925</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4926"><a href="#L-4926"><span class="linenos">4926</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-4927"><a href="#L-4927"><span class="linenos">4927</span></a>
+</span><span id="L-4928"><a href="#L-4928"><span class="linenos">4928</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRIM_TYPES</span><span class="p">):</span>
+</span><span id="L-4929"><a href="#L-4929"><span class="linenos">4929</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-4930"><a href="#L-4930"><span class="linenos">4930</span></a>
+</span><span id="L-4931"><a href="#L-4931"><span class="linenos">4931</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-4932"><a href="#L-4932"><span class="linenos">4932</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)):</span>
+</span><span id="L-4933"><a href="#L-4933"><span class="linenos">4933</span></a> <span class="n">invert_order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRIM_PATTERN_FIRST</span>
+</span><span id="L-4934"><a href="#L-4934"><span class="linenos">4934</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="L-4935"><a href="#L-4935"><span class="linenos">4935</span></a>
-</span><span id="L-4936"><a href="#L-4936"><span class="linenos">4936</span></a> <span class="k">def</span> <span class="nf">_parse_named_window</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4937"><a href="#L-4937"><span class="linenos">4937</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span> <span class="n">alias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4936"><a href="#L-4936"><span class="linenos">4936</span></a> <span class="k">if</span> <span class="n">invert_order</span><span class="p">:</span>
+</span><span id="L-4937"><a href="#L-4937"><span class="linenos">4937</span></a> <span class="n">this</span><span class="p">,</span> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="p">,</span> <span class="n">this</span>
</span><span id="L-4938"><a href="#L-4938"><span class="linenos">4938</span></a>
-</span><span id="L-4939"><a href="#L-4939"><span class="linenos">4939</span></a> <span class="k">def</span> <span class="nf">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
-</span><span id="L-4940"><a href="#L-4940"><span class="linenos">4940</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="L-4941"><a href="#L-4941"><span class="linenos">4941</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4942"><a href="#L-4942"><span class="linenos">4942</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="L-4943"><a href="#L-4943"><span class="linenos">4943</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">IgnoreNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4944"><a href="#L-4944"><span class="linenos">4944</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESPECT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="L-4945"><a href="#L-4945"><span class="linenos">4945</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4946"><a href="#L-4946"><span class="linenos">4946</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4947"><a href="#L-4947"><span class="linenos">4947</span></a>
-</span><span id="L-4948"><a href="#L-4948"><span class="linenos">4948</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
-</span><span id="L-4949"><a href="#L-4949"><span class="linenos">4949</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-4950"><a href="#L-4950"><span class="linenos">4950</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-4951"><a href="#L-4951"><span class="linenos">4951</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-4952"><a href="#L-4952"><span class="linenos">4952</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">)</span>
-</span><span id="L-4953"><a href="#L-4953"><span class="linenos">4953</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4954"><a href="#L-4954"><span class="linenos">4954</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(</span><span class="n">skip_where_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-4955"><a href="#L-4955"><span class="linenos">4955</span></a> <span class="p">)</span>
-</span><span id="L-4956"><a href="#L-4956"><span class="linenos">4956</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-4957"><a href="#L-4957"><span class="linenos">4957</span></a>
-</span><span id="L-4958"><a href="#L-4958"><span class="linenos">4958</span></a> <span class="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
-</span><span id="L-4959"><a href="#L-4959"><span class="linenos">4959</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/percentile-disc-transact-sql?view=sql-server-ver16</span>
-</span><span id="L-4960"><a href="#L-4960"><span class="linenos">4960</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
-</span><span id="L-4961"><a href="#L-4961"><span class="linenos">4961</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">)</span>
-</span><span id="L-4962"><a href="#L-4962"><span class="linenos">4962</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">order</span><span class="p">)</span>
-</span><span id="L-4963"><a href="#L-4963"><span class="linenos">4963</span></a>
-</span><span id="L-4964"><a href="#L-4964"><span class="linenos">4964</span></a> <span class="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
-</span><span id="L-4965"><a href="#L-4965"><span class="linenos">4965</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
-</span><span id="L-4966"><a href="#L-4966"><span class="linenos">4966</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
-</span><span id="L-4967"><a href="#L-4967"><span class="linenos">4967</span></a>
-</span><span id="L-4968"><a href="#L-4968"><span class="linenos">4968</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
-</span><span id="L-4969"><a href="#L-4969"><span class="linenos">4969</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</span>
+</span><span id="L-4939"><a href="#L-4939"><span class="linenos">4939</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">):</span>
+</span><span id="L-4940"><a href="#L-4940"><span class="linenos">4940</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-4941"><a href="#L-4941"><span class="linenos">4941</span></a>
+</span><span id="L-4942"><a href="#L-4942"><span class="linenos">4942</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4943"><a href="#L-4943"><span class="linenos">4943</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">collation</span><span class="o">=</span><span class="n">collation</span>
+</span><span id="L-4944"><a href="#L-4944"><span class="linenos">4944</span></a> <span class="p">)</span>
+</span><span id="L-4945"><a href="#L-4945"><span class="linenos">4945</span></a>
+</span><span id="L-4946"><a href="#L-4946"><span class="linenos">4946</span></a> <span class="k">def</span> <span class="nf">_parse_window_clause</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-4947"><a href="#L-4947"><span class="linenos">4947</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_named_window</span><span class="p">)</span>
+</span><span id="L-4948"><a href="#L-4948"><span class="linenos">4948</span></a>
+</span><span id="L-4949"><a href="#L-4949"><span class="linenos">4949</span></a> <span class="k">def</span> <span class="nf">_parse_named_window</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4950"><a href="#L-4950"><span class="linenos">4950</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span> <span class="n">alias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4951"><a href="#L-4951"><span class="linenos">4951</span></a>
+</span><span id="L-4952"><a href="#L-4952"><span class="linenos">4952</span></a> <span class="k">def</span> <span class="nf">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
+</span><span id="L-4953"><a href="#L-4953"><span class="linenos">4953</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="L-4954"><a href="#L-4954"><span class="linenos">4954</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4955"><a href="#L-4955"><span class="linenos">4955</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="L-4956"><a href="#L-4956"><span class="linenos">4956</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">IgnoreNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4957"><a href="#L-4957"><span class="linenos">4957</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESPECT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="L-4958"><a href="#L-4958"><span class="linenos">4958</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4959"><a href="#L-4959"><span class="linenos">4959</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-4960"><a href="#L-4960"><span class="linenos">4960</span></a>
+</span><span id="L-4961"><a href="#L-4961"><span class="linenos">4961</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
+</span><span id="L-4962"><a href="#L-4962"><span class="linenos">4962</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-4963"><a href="#L-4963"><span class="linenos">4963</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-4964"><a href="#L-4964"><span class="linenos">4964</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-4965"><a href="#L-4965"><span class="linenos">4965</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">)</span>
+</span><span id="L-4966"><a href="#L-4966"><span class="linenos">4966</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-4967"><a href="#L-4967"><span class="linenos">4967</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(</span><span class="n">skip_where_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-4968"><a href="#L-4968"><span class="linenos">4968</span></a> <span class="p">)</span>
+</span><span id="L-4969"><a href="#L-4969"><span class="linenos">4969</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="L-4970"><a href="#L-4970"><span class="linenos">4970</span></a>
-</span><span id="L-4971"><a href="#L-4971"><span class="linenos">4971</span></a> <span class="c1"># The below changes handle</span>
-</span><span id="L-4972"><a href="#L-4972"><span class="linenos">4972</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
-</span><span id="L-4973"><a href="#L-4973"><span class="linenos">4973</span></a>
-</span><span id="L-4974"><a href="#L-4974"><span class="linenos">4974</span></a> <span class="c1"># Oracle allows both formats</span>
-</span><span id="L-4975"><a href="#L-4975"><span class="linenos">4975</span></a> <span class="c1"># (https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/img_text/first_value.html)</span>
-</span><span id="L-4976"><a href="#L-4976"><span class="linenos">4976</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
-</span><span id="L-4977"><a href="#L-4977"><span class="linenos">4977</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
-</span><span id="L-4978"><a href="#L-4978"><span class="linenos">4978</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">AggFunc</span><span class="p">):</span>
-</span><span id="L-4979"><a href="#L-4979"><span class="linenos">4979</span></a> <span class="n">ignore_respect</span> <span class="o">=</span> <span class="n">this</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">IgnoreNulls</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">)</span>
+</span><span id="L-4971"><a href="#L-4971"><span class="linenos">4971</span></a> <span class="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
+</span><span id="L-4972"><a href="#L-4972"><span class="linenos">4972</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/percentile-disc-transact-sql?view=sql-server-ver16</span>
+</span><span id="L-4973"><a href="#L-4973"><span class="linenos">4973</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
+</span><span id="L-4974"><a href="#L-4974"><span class="linenos">4974</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">)</span>
+</span><span id="L-4975"><a href="#L-4975"><span class="linenos">4975</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">order</span><span class="p">)</span>
+</span><span id="L-4976"><a href="#L-4976"><span class="linenos">4976</span></a>
+</span><span id="L-4977"><a href="#L-4977"><span class="linenos">4977</span></a> <span class="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
+</span><span id="L-4978"><a href="#L-4978"><span class="linenos">4978</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
+</span><span id="L-4979"><a href="#L-4979"><span class="linenos">4979</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
</span><span id="L-4980"><a href="#L-4980"><span class="linenos">4980</span></a>
-</span><span id="L-4981"><a href="#L-4981"><span class="linenos">4981</span></a> <span class="k">if</span> <span class="n">ignore_respect</span> <span class="ow">and</span> <span class="n">ignore_respect</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="L-4982"><a href="#L-4982"><span class="linenos">4982</span></a> <span class="n">ignore_respect</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4983"><a href="#L-4983"><span class="linenos">4983</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="L-4984"><a href="#L-4984"><span class="linenos">4984</span></a>
-</span><span id="L-4985"><a href="#L-4985"><span class="linenos">4985</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4981"><a href="#L-4981"><span class="linenos">4981</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
+</span><span id="L-4982"><a href="#L-4982"><span class="linenos">4982</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</span>
+</span><span id="L-4983"><a href="#L-4983"><span class="linenos">4983</span></a>
+</span><span id="L-4984"><a href="#L-4984"><span class="linenos">4984</span></a> <span class="c1"># The below changes handle</span>
+</span><span id="L-4985"><a href="#L-4985"><span class="linenos">4985</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
</span><span id="L-4986"><a href="#L-4986"><span class="linenos">4986</span></a>
-</span><span id="L-4987"><a href="#L-4987"><span class="linenos">4987</span></a> <span class="c1"># bigquery select from window x AS (partition by ...)</span>
-</span><span id="L-4988"><a href="#L-4988"><span class="linenos">4988</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-4989"><a href="#L-4989"><span class="linenos">4989</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-4990"><a href="#L-4990"><span class="linenos">4990</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
-</span><span id="L-4991"><a href="#L-4991"><span class="linenos">4991</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">):</span>
-</span><span id="L-4992"><a href="#L-4992"><span class="linenos">4992</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-4993"><a href="#L-4993"><span class="linenos">4993</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-4994"><a href="#L-4994"><span class="linenos">4994</span></a> <span class="n">over</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-4995"><a href="#L-4995"><span class="linenos">4995</span></a>
-</span><span id="L-4996"><a href="#L-4996"><span class="linenos">4996</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-4997"><a href="#L-4997"><span class="linenos">4997</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-4998"><a href="#L-4998"><span class="linenos">4998</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="kc">False</span><span class="p">),</span> <span class="n">over</span><span class="o">=</span><span class="n">over</span>
-</span><span id="L-4999"><a href="#L-4999"><span class="linenos">4999</span></a> <span class="p">)</span>
-</span><span id="L-5000"><a href="#L-5000"><span class="linenos">5000</span></a>
-</span><span id="L-5001"><a href="#L-5001"><span class="linenos">5001</span></a> <span class="n">window_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_ALIAS_TOKENS</span><span class="p">)</span>
-</span><span id="L-5002"><a href="#L-5002"><span class="linenos">5002</span></a>
-</span><span id="L-5003"><a href="#L-5003"><span class="linenos">5003</span></a> <span class="n">first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">)</span>
-</span><span id="L-5004"><a href="#L-5004"><span class="linenos">5004</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
-</span><span id="L-5005"><a href="#L-5005"><span class="linenos">5005</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-5006"><a href="#L-5006"><span class="linenos">5006</span></a>
-</span><span id="L-5007"><a href="#L-5007"><span class="linenos">5007</span></a> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_and_order</span><span class="p">()</span>
-</span><span id="L-5008"><a href="#L-5008"><span class="linenos">5008</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">))</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-5009"><a href="#L-5009"><span class="linenos">5009</span></a>
-</span><span id="L-5010"><a href="#L-5010"><span class="linenos">5010</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="L-5011"><a href="#L-5011"><span class="linenos">5011</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)</span>
-</span><span id="L-5012"><a href="#L-5012"><span class="linenos">5012</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
-</span><span id="L-5013"><a href="#L-5013"><span class="linenos">5013</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span>
-</span><span id="L-5014"><a href="#L-5014"><span class="linenos">5014</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
+</span><span id="L-4987"><a href="#L-4987"><span class="linenos">4987</span></a> <span class="c1"># Oracle allows both formats</span>
+</span><span id="L-4988"><a href="#L-4988"><span class="linenos">4988</span></a> <span class="c1"># (https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/img_text/first_value.html)</span>
+</span><span id="L-4989"><a href="#L-4989"><span class="linenos">4989</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
+</span><span id="L-4990"><a href="#L-4990"><span class="linenos">4990</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
+</span><span id="L-4991"><a href="#L-4991"><span class="linenos">4991</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">AggFunc</span><span class="p">):</span>
+</span><span id="L-4992"><a href="#L-4992"><span class="linenos">4992</span></a> <span class="n">ignore_respect</span> <span class="o">=</span> <span class="n">this</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">IgnoreNulls</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">)</span>
+</span><span id="L-4993"><a href="#L-4993"><span class="linenos">4993</span></a>
+</span><span id="L-4994"><a href="#L-4994"><span class="linenos">4994</span></a> <span class="k">if</span> <span class="n">ignore_respect</span> <span class="ow">and</span> <span class="n">ignore_respect</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="L-4995"><a href="#L-4995"><span class="linenos">4995</span></a> <span class="n">ignore_respect</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4996"><a href="#L-4996"><span class="linenos">4996</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4997"><a href="#L-4997"><span class="linenos">4997</span></a>
+</span><span id="L-4998"><a href="#L-4998"><span class="linenos">4998</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="L-4999"><a href="#L-4999"><span class="linenos">4999</span></a>
+</span><span id="L-5000"><a href="#L-5000"><span class="linenos">5000</span></a> <span class="c1"># bigquery select from window x AS (partition by ...)</span>
+</span><span id="L-5001"><a href="#L-5001"><span class="linenos">5001</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-5002"><a href="#L-5002"><span class="linenos">5002</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5003"><a href="#L-5003"><span class="linenos">5003</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
+</span><span id="L-5004"><a href="#L-5004"><span class="linenos">5004</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">):</span>
+</span><span id="L-5005"><a href="#L-5005"><span class="linenos">5005</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-5006"><a href="#L-5006"><span class="linenos">5006</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5007"><a href="#L-5007"><span class="linenos">5007</span></a> <span class="n">over</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-5008"><a href="#L-5008"><span class="linenos">5008</span></a>
+</span><span id="L-5009"><a href="#L-5009"><span class="linenos">5009</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-5010"><a href="#L-5010"><span class="linenos">5010</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5011"><a href="#L-5011"><span class="linenos">5011</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="kc">False</span><span class="p">),</span> <span class="n">over</span><span class="o">=</span><span class="n">over</span>
+</span><span id="L-5012"><a href="#L-5012"><span class="linenos">5012</span></a> <span class="p">)</span>
+</span><span id="L-5013"><a href="#L-5013"><span class="linenos">5013</span></a>
+</span><span id="L-5014"><a href="#L-5014"><span class="linenos">5014</span></a> <span class="n">window_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_ALIAS_TOKENS</span><span class="p">)</span>
</span><span id="L-5015"><a href="#L-5015"><span class="linenos">5015</span></a>
-</span><span id="L-5016"><a href="#L-5016"><span class="linenos">5016</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5017"><a href="#L-5017"><span class="linenos">5017</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
-</span><span id="L-5018"><a href="#L-5018"><span class="linenos">5018</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="L-5019"><a href="#L-5019"><span class="linenos">5019</span></a> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
-</span><span id="L-5020"><a href="#L-5020"><span class="linenos">5020</span></a> <span class="n">start_side</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
-</span><span id="L-5021"><a href="#L-5021"><span class="linenos">5021</span></a> <span class="n">end</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
-</span><span id="L-5022"><a href="#L-5022"><span class="linenos">5022</span></a> <span class="n">end_side</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
-</span><span id="L-5023"><a href="#L-5023"><span class="linenos">5023</span></a> <span class="p">)</span>
-</span><span id="L-5024"><a href="#L-5024"><span class="linenos">5024</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5025"><a href="#L-5025"><span class="linenos">5025</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5026"><a href="#L-5026"><span class="linenos">5026</span></a>
-</span><span id="L-5027"><a href="#L-5027"><span class="linenos">5027</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-5016"><a href="#L-5016"><span class="linenos">5016</span></a> <span class="n">first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">)</span>
+</span><span id="L-5017"><a href="#L-5017"><span class="linenos">5017</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
+</span><span id="L-5018"><a href="#L-5018"><span class="linenos">5018</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-5019"><a href="#L-5019"><span class="linenos">5019</span></a>
+</span><span id="L-5020"><a href="#L-5020"><span class="linenos">5020</span></a> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_and_order</span><span class="p">()</span>
+</span><span id="L-5021"><a href="#L-5021"><span class="linenos">5021</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">))</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
+</span><span id="L-5022"><a href="#L-5022"><span class="linenos">5022</span></a>
+</span><span id="L-5023"><a href="#L-5023"><span class="linenos">5023</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="L-5024"><a href="#L-5024"><span class="linenos">5024</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)</span>
+</span><span id="L-5025"><a href="#L-5025"><span class="linenos">5025</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
+</span><span id="L-5026"><a href="#L-5026"><span class="linenos">5026</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span>
+</span><span id="L-5027"><a href="#L-5027"><span class="linenos">5027</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
</span><span id="L-5028"><a href="#L-5028"><span class="linenos">5028</span></a>
-</span><span id="L-5029"><a href="#L-5029"><span class="linenos">5029</span></a> <span class="n">window</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5030"><a href="#L-5030"><span class="linenos">5030</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
-</span><span id="L-5031"><a href="#L-5031"><span class="linenos">5031</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-5032"><a href="#L-5032"><span class="linenos">5032</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
-</span><span id="L-5033"><a href="#L-5033"><span class="linenos">5033</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="L-5034"><a href="#L-5034"><span class="linenos">5034</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
-</span><span id="L-5035"><a href="#L-5035"><span class="linenos">5035</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">window_alias</span><span class="p">,</span>
-</span><span id="L-5036"><a href="#L-5036"><span class="linenos">5036</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
-</span><span id="L-5037"><a href="#L-5037"><span class="linenos">5037</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
-</span><span id="L-5038"><a href="#L-5038"><span class="linenos">5038</span></a> <span class="p">)</span>
+</span><span id="L-5029"><a href="#L-5029"><span class="linenos">5029</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5030"><a href="#L-5030"><span class="linenos">5030</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
+</span><span id="L-5031"><a href="#L-5031"><span class="linenos">5031</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="L-5032"><a href="#L-5032"><span class="linenos">5032</span></a> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
+</span><span id="L-5033"><a href="#L-5033"><span class="linenos">5033</span></a> <span class="n">start_side</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
+</span><span id="L-5034"><a href="#L-5034"><span class="linenos">5034</span></a> <span class="n">end</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
+</span><span id="L-5035"><a href="#L-5035"><span class="linenos">5035</span></a> <span class="n">end_side</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
+</span><span id="L-5036"><a href="#L-5036"><span class="linenos">5036</span></a> <span class="p">)</span>
+</span><span id="L-5037"><a href="#L-5037"><span class="linenos">5037</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5038"><a href="#L-5038"><span class="linenos">5038</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-5039"><a href="#L-5039"><span class="linenos">5039</span></a>
-</span><span id="L-5040"><a href="#L-5040"><span class="linenos">5040</span></a> <span class="c1"># This covers Oracle&#39;s FIRST/LAST syntax: aggregate KEEP (...) OVER (...)</span>
-</span><span id="L-5041"><a href="#L-5041"><span class="linenos">5041</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-5042"><a href="#L-5042"><span class="linenos">5042</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="L-5043"><a href="#L-5043"><span class="linenos">5043</span></a>
-</span><span id="L-5044"><a href="#L-5044"><span class="linenos">5044</span></a> <span class="k">return</span> <span class="n">window</span>
-</span><span id="L-5045"><a href="#L-5045"><span class="linenos">5045</span></a>
-</span><span id="L-5046"><a href="#L-5046"><span class="linenos">5046</span></a> <span class="k">def</span> <span class="nf">_parse_partition_and_order</span><span class="p">(</span>
-</span><span id="L-5047"><a href="#L-5047"><span class="linenos">5047</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-5048"><a href="#L-5048"><span class="linenos">5048</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="L-5049"><a href="#L-5049"><span class="linenos">5049</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
-</span><span id="L-5050"><a href="#L-5050"><span class="linenos">5050</span></a>
-</span><span id="L-5051"><a href="#L-5051"><span class="linenos">5051</span></a> <span class="k">def</span> <span class="nf">_parse_window_spec</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="L-5052"><a href="#L-5052"><span class="linenos">5052</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)</span>
-</span><span id="L-5053"><a href="#L-5053"><span class="linenos">5053</span></a>
-</span><span id="L-5054"><a href="#L-5054"><span class="linenos">5054</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="L-5055"><a href="#L-5055"><span class="linenos">5055</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="L-5056"><a href="#L-5056"><span class="linenos">5056</span></a> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span>
-</span><span id="L-5057"><a href="#L-5057"><span class="linenos">5057</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CURRENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">)</span>
-</span><span id="L-5058"><a href="#L-5058"><span class="linenos">5058</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="L-5059"><a href="#L-5059"><span class="linenos">5059</span></a> <span class="p">),</span>
-</span><span id="L-5060"><a href="#L-5060"><span class="linenos">5060</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
-</span><span id="L-5061"><a href="#L-5061"><span class="linenos">5061</span></a> <span class="p">}</span>
-</span><span id="L-5062"><a href="#L-5062"><span class="linenos">5062</span></a>
-</span><span id="L-5063"><a href="#L-5063"><span class="linenos">5063</span></a> <span class="k">def</span> <span class="nf">_parse_alias</span><span class="p">(</span>
-</span><span id="L-5064"><a href="#L-5064"><span class="linenos">5064</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">explicit</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-5065"><a href="#L-5065"><span class="linenos">5065</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5066"><a href="#L-5066"><span class="linenos">5066</span></a> <span class="n">any_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
-</span><span id="L-5067"><a href="#L-5067"><span class="linenos">5067</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="L-5068"><a href="#L-5068"><span class="linenos">5068</span></a>
-</span><span id="L-5069"><a href="#L-5069"><span class="linenos">5069</span></a> <span class="k">if</span> <span class="n">explicit</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">any_token</span><span class="p">:</span>
-</span><span id="L-5070"><a href="#L-5070"><span class="linenos">5070</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-5071"><a href="#L-5071"><span class="linenos">5071</span></a>
-</span><span id="L-5072"><a href="#L-5072"><span class="linenos">5072</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-5073"><a href="#L-5073"><span class="linenos">5073</span></a> <span class="n">aliases</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5074"><a href="#L-5074"><span class="linenos">5074</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
-</span><span id="L-5075"><a href="#L-5075"><span class="linenos">5075</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="L-5076"><a href="#L-5076"><span class="linenos">5076</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-5077"><a href="#L-5077"><span class="linenos">5077</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="p">)),</span>
-</span><span id="L-5078"><a href="#L-5078"><span class="linenos">5078</span></a> <span class="p">)</span>
-</span><span id="L-5079"><a href="#L-5079"><span class="linenos">5079</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span>
-</span><span id="L-5080"><a href="#L-5080"><span class="linenos">5080</span></a> <span class="k">return</span> <span class="n">aliases</span>
+</span><span id="L-5040"><a href="#L-5040"><span class="linenos">5040</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-5041"><a href="#L-5041"><span class="linenos">5041</span></a>
+</span><span id="L-5042"><a href="#L-5042"><span class="linenos">5042</span></a> <span class="n">window</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5043"><a href="#L-5043"><span class="linenos">5043</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
+</span><span id="L-5044"><a href="#L-5044"><span class="linenos">5044</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-5045"><a href="#L-5045"><span class="linenos">5045</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
+</span><span id="L-5046"><a href="#L-5046"><span class="linenos">5046</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="L-5047"><a href="#L-5047"><span class="linenos">5047</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
+</span><span id="L-5048"><a href="#L-5048"><span class="linenos">5048</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">window_alias</span><span class="p">,</span>
+</span><span id="L-5049"><a href="#L-5049"><span class="linenos">5049</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
+</span><span id="L-5050"><a href="#L-5050"><span class="linenos">5050</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
+</span><span id="L-5051"><a href="#L-5051"><span class="linenos">5051</span></a> <span class="p">)</span>
+</span><span id="L-5052"><a href="#L-5052"><span class="linenos">5052</span></a>
+</span><span id="L-5053"><a href="#L-5053"><span class="linenos">5053</span></a> <span class="c1"># This covers Oracle&#39;s FIRST/LAST syntax: aggregate KEEP (...) OVER (...)</span>
+</span><span id="L-5054"><a href="#L-5054"><span class="linenos">5054</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-5055"><a href="#L-5055"><span class="linenos">5055</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="L-5056"><a href="#L-5056"><span class="linenos">5056</span></a>
+</span><span id="L-5057"><a href="#L-5057"><span class="linenos">5057</span></a> <span class="k">return</span> <span class="n">window</span>
+</span><span id="L-5058"><a href="#L-5058"><span class="linenos">5058</span></a>
+</span><span id="L-5059"><a href="#L-5059"><span class="linenos">5059</span></a> <span class="k">def</span> <span class="nf">_parse_partition_and_order</span><span class="p">(</span>
+</span><span id="L-5060"><a href="#L-5060"><span class="linenos">5060</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-5061"><a href="#L-5061"><span class="linenos">5061</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-5062"><a href="#L-5062"><span class="linenos">5062</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
+</span><span id="L-5063"><a href="#L-5063"><span class="linenos">5063</span></a>
+</span><span id="L-5064"><a href="#L-5064"><span class="linenos">5064</span></a> <span class="k">def</span> <span class="nf">_parse_window_spec</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-5065"><a href="#L-5065"><span class="linenos">5065</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)</span>
+</span><span id="L-5066"><a href="#L-5066"><span class="linenos">5066</span></a>
+</span><span id="L-5067"><a href="#L-5067"><span class="linenos">5067</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="L-5068"><a href="#L-5068"><span class="linenos">5068</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="L-5069"><a href="#L-5069"><span class="linenos">5069</span></a> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span>
+</span><span id="L-5070"><a href="#L-5070"><span class="linenos">5070</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CURRENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">)</span>
+</span><span id="L-5071"><a href="#L-5071"><span class="linenos">5071</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="L-5072"><a href="#L-5072"><span class="linenos">5072</span></a> <span class="p">),</span>
+</span><span id="L-5073"><a href="#L-5073"><span class="linenos">5073</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
+</span><span id="L-5074"><a href="#L-5074"><span class="linenos">5074</span></a> <span class="p">}</span>
+</span><span id="L-5075"><a href="#L-5075"><span class="linenos">5075</span></a>
+</span><span id="L-5076"><a href="#L-5076"><span class="linenos">5076</span></a> <span class="k">def</span> <span class="nf">_parse_alias</span><span class="p">(</span>
+</span><span id="L-5077"><a href="#L-5077"><span class="linenos">5077</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">explicit</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-5078"><a href="#L-5078"><span class="linenos">5078</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5079"><a href="#L-5079"><span class="linenos">5079</span></a> <span class="n">any_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
+</span><span id="L-5080"><a href="#L-5080"><span class="linenos">5080</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="L-5081"><a href="#L-5081"><span class="linenos">5081</span></a>
-</span><span id="L-5082"><a href="#L-5082"><span class="linenos">5082</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="L-5083"><a href="#L-5083"><span class="linenos">5083</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ALIASES</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
-</span><span id="L-5084"><a href="#L-5084"><span class="linenos">5084</span></a> <span class="p">)</span>
-</span><span id="L-5085"><a href="#L-5085"><span class="linenos">5085</span></a>
-</span><span id="L-5086"><a href="#L-5086"><span class="linenos">5086</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="L-5087"><a href="#L-5087"><span class="linenos">5087</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="L-5088"><a href="#L-5088"><span class="linenos">5088</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-5089"><a href="#L-5089"><span class="linenos">5089</span></a>
-</span><span id="L-5090"><a href="#L-5090"><span class="linenos">5090</span></a> <span class="c1"># Moves the comment next to the alias in `expr /* comment */ AS alias`</span>
-</span><span id="L-5091"><a href="#L-5091"><span class="linenos">5091</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">column</span> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span><span class="p">:</span>
-</span><span id="L-5092"><a href="#L-5092"><span class="linenos">5092</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="L-5093"><a href="#L-5093"><span class="linenos">5093</span></a> <span class="n">column</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5082"><a href="#L-5082"><span class="linenos">5082</span></a> <span class="k">if</span> <span class="n">explicit</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">any_token</span><span class="p">:</span>
+</span><span id="L-5083"><a href="#L-5083"><span class="linenos">5083</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-5084"><a href="#L-5084"><span class="linenos">5084</span></a>
+</span><span id="L-5085"><a href="#L-5085"><span class="linenos">5085</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-5086"><a href="#L-5086"><span class="linenos">5086</span></a> <span class="n">aliases</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5087"><a href="#L-5087"><span class="linenos">5087</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
+</span><span id="L-5088"><a href="#L-5088"><span class="linenos">5088</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="L-5089"><a href="#L-5089"><span class="linenos">5089</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-5090"><a href="#L-5090"><span class="linenos">5090</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="p">)),</span>
+</span><span id="L-5091"><a href="#L-5091"><span class="linenos">5091</span></a> <span class="p">)</span>
+</span><span id="L-5092"><a href="#L-5092"><span class="linenos">5092</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span>
+</span><span id="L-5093"><a href="#L-5093"><span class="linenos">5093</span></a> <span class="k">return</span> <span class="n">aliases</span>
</span><span id="L-5094"><a href="#L-5094"><span class="linenos">5094</span></a>
-</span><span id="L-5095"><a href="#L-5095"><span class="linenos">5095</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-5096"><a href="#L-5096"><span class="linenos">5096</span></a>
-</span><span id="L-5097"><a href="#L-5097"><span class="linenos">5097</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
-</span><span id="L-5098"><a href="#L-5098"><span class="linenos">5098</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-5099"><a href="#L-5099"><span class="linenos">5099</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-5100"><a href="#L-5100"><span class="linenos">5100</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-5101"><a href="#L-5101"><span class="linenos">5101</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5102"><a href="#L-5102"><span class="linenos">5102</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span>
-</span><span id="L-5103"><a href="#L-5103"><span class="linenos">5103</span></a>
-</span><span id="L-5104"><a href="#L-5104"><span class="linenos">5104</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
-</span><span id="L-5105"><a href="#L-5105"><span class="linenos">5105</span></a> <span class="k">return</span> <span class="n">identifier</span>
-</span><span id="L-5106"><a href="#L-5106"><span class="linenos">5106</span></a>
-</span><span id="L-5107"><a href="#L-5107"><span class="linenos">5107</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span><span class="p">):</span>
-</span><span id="L-5108"><a href="#L-5108"><span class="linenos">5108</span></a> <span class="n">quoted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
-</span><span id="L-5109"><a href="#L-5109"><span class="linenos">5109</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">quoted</span><span class="p">)</span>
-</span><span id="L-5110"><a href="#L-5110"><span class="linenos">5110</span></a>
-</span><span id="L-5111"><a href="#L-5111"><span class="linenos">5111</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5112"><a href="#L-5112"><span class="linenos">5112</span></a>
-</span><span id="L-5113"><a href="#L-5113"><span class="linenos">5113</span></a> <span class="k">def</span> <span class="nf">_parse_string</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5114"><a href="#L-5114"><span class="linenos">5114</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RAW_STRING</span><span class="p">)):</span>
-</span><span id="L-5115"><a href="#L-5115"><span class="linenos">5115</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5116"><a href="#L-5116"><span class="linenos">5116</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="L-5117"><a href="#L-5117"><span class="linenos">5117</span></a>
-</span><span id="L-5118"><a href="#L-5118"><span class="linenos">5118</span></a> <span class="k">def</span> <span class="nf">_parse_string_as_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]:</span>
-</span><span id="L-5119"><a href="#L-5119"><span class="linenos">5119</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-5120"><a href="#L-5120"><span class="linenos">5120</span></a>
-</span><span id="L-5121"><a href="#L-5121"><span class="linenos">5121</span></a> <span class="k">def</span> <span class="nf">_parse_number</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5122"><a href="#L-5122"><span class="linenos">5122</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">):</span>
-</span><span id="L-5123"><a href="#L-5123"><span class="linenos">5123</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5124"><a href="#L-5124"><span class="linenos">5124</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-5095"><a href="#L-5095"><span class="linenos">5095</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="L-5096"><a href="#L-5096"><span class="linenos">5096</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ALIASES</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
+</span><span id="L-5097"><a href="#L-5097"><span class="linenos">5097</span></a> <span class="p">)</span>
+</span><span id="L-5098"><a href="#L-5098"><span class="linenos">5098</span></a>
+</span><span id="L-5099"><a href="#L-5099"><span class="linenos">5099</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="L-5100"><a href="#L-5100"><span class="linenos">5100</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="L-5101"><a href="#L-5101"><span class="linenos">5101</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-5102"><a href="#L-5102"><span class="linenos">5102</span></a>
+</span><span id="L-5103"><a href="#L-5103"><span class="linenos">5103</span></a> <span class="c1"># Moves the comment next to the alias in `expr /* comment */ AS alias`</span>
+</span><span id="L-5104"><a href="#L-5104"><span class="linenos">5104</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">column</span> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span><span class="p">:</span>
+</span><span id="L-5105"><a href="#L-5105"><span class="linenos">5105</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="L-5106"><a href="#L-5106"><span class="linenos">5106</span></a> <span class="n">column</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5107"><a href="#L-5107"><span class="linenos">5107</span></a>
+</span><span id="L-5108"><a href="#L-5108"><span class="linenos">5108</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-5109"><a href="#L-5109"><span class="linenos">5109</span></a>
+</span><span id="L-5110"><a href="#L-5110"><span class="linenos">5110</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
+</span><span id="L-5111"><a href="#L-5111"><span class="linenos">5111</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-5112"><a href="#L-5112"><span class="linenos">5112</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-5113"><a href="#L-5113"><span class="linenos">5113</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5114"><a href="#L-5114"><span class="linenos">5114</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5115"><a href="#L-5115"><span class="linenos">5115</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span>
+</span><span id="L-5116"><a href="#L-5116"><span class="linenos">5116</span></a>
+</span><span id="L-5117"><a href="#L-5117"><span class="linenos">5117</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
+</span><span id="L-5118"><a href="#L-5118"><span class="linenos">5118</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="L-5119"><a href="#L-5119"><span class="linenos">5119</span></a>
+</span><span id="L-5120"><a href="#L-5120"><span class="linenos">5120</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span><span class="p">):</span>
+</span><span id="L-5121"><a href="#L-5121"><span class="linenos">5121</span></a> <span class="n">quoted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
+</span><span id="L-5122"><a href="#L-5122"><span class="linenos">5122</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">quoted</span><span class="p">)</span>
+</span><span id="L-5123"><a href="#L-5123"><span class="linenos">5123</span></a>
+</span><span id="L-5124"><a href="#L-5124"><span class="linenos">5124</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5125"><a href="#L-5125"><span class="linenos">5125</span></a>
-</span><span id="L-5126"><a href="#L-5126"><span class="linenos">5126</span></a> <span class="k">def</span> <span class="nf">_parse_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5127"><a href="#L-5127"><span class="linenos">5127</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">):</span>
-</span><span id="L-5128"><a href="#L-5128"><span class="linenos">5128</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5126"><a href="#L-5126"><span class="linenos">5126</span></a> <span class="k">def</span> <span class="nf">_parse_string</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5127"><a href="#L-5127"><span class="linenos">5127</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RAW_STRING</span><span class="p">)):</span>
+</span><span id="L-5128"><a href="#L-5128"><span class="linenos">5128</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="L-5129"><a href="#L-5129"><span class="linenos">5129</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="L-5130"><a href="#L-5130"><span class="linenos">5130</span></a>
-</span><span id="L-5131"><a href="#L-5131"><span class="linenos">5131</span></a> <span class="k">def</span> <span class="nf">_parse_var</span><span class="p">(</span>
-</span><span id="L-5132"><a href="#L-5132"><span class="linenos">5132</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="L-5133"><a href="#L-5133"><span class="linenos">5133</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-5134"><a href="#L-5134"><span class="linenos">5134</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-5135"><a href="#L-5135"><span class="linenos">5135</span></a> <span class="n">upper</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-5136"><a href="#L-5136"><span class="linenos">5136</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5137"><a href="#L-5137"><span class="linenos">5137</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-5138"><a href="#L-5138"><span class="linenos">5138</span></a> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span>
-</span><span id="L-5139"><a href="#L-5139"><span class="linenos">5139</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
-</span><span id="L-5140"><a href="#L-5140"><span class="linenos">5140</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="k">if</span> <span class="n">tokens</span> <span class="k">else</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="L-5141"><a href="#L-5141"><span class="linenos">5141</span></a> <span class="p">):</span>
-</span><span id="L-5142"><a href="#L-5142"><span class="linenos">5142</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5143"><a href="#L-5143"><span class="linenos">5143</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">upper</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-5144"><a href="#L-5144"><span class="linenos">5144</span></a> <span class="p">)</span>
-</span><span id="L-5145"><a href="#L-5145"><span class="linenos">5145</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="L-5146"><a href="#L-5146"><span class="linenos">5146</span></a>
-</span><span id="L-5147"><a href="#L-5147"><span class="linenos">5147</span></a> <span class="k">def</span> <span class="nf">_advance_any</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ignore_reserved</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
-</span><span id="L-5148"><a href="#L-5148"><span class="linenos">5148</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="p">(</span><span class="n">ignore_reserved</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_TOKENS</span><span class="p">):</span>
-</span><span id="L-5149"><a href="#L-5149"><span class="linenos">5149</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5150"><a href="#L-5150"><span class="linenos">5150</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="L-5151"><a href="#L-5151"><span class="linenos">5151</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5152"><a href="#L-5152"><span class="linenos">5152</span></a>
-</span><span id="L-5153"><a href="#L-5153"><span class="linenos">5153</span></a> <span class="k">def</span> <span class="nf">_parse_var_or_string</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5154"><a href="#L-5154"><span class="linenos">5154</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="L-5155"><a href="#L-5155"><span class="linenos">5155</span></a>
-</span><span id="L-5156"><a href="#L-5156"><span class="linenos">5156</span></a> <span class="k">def</span> <span class="nf">_parse_null</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5157"><a href="#L-5157"><span class="linenos">5157</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NULL_TOKENS</span><span class="p">):</span>
-</span><span id="L-5158"><a href="#L-5158"><span class="linenos">5158</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5159"><a href="#L-5159"><span class="linenos">5159</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="L-5160"><a href="#L-5160"><span class="linenos">5160</span></a>
-</span><span id="L-5161"><a href="#L-5161"><span class="linenos">5161</span></a> <span class="k">def</span> <span class="nf">_parse_boolean</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5162"><a href="#L-5162"><span class="linenos">5162</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">):</span>
-</span><span id="L-5163"><a href="#L-5163"><span class="linenos">5163</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5164"><a href="#L-5164"><span class="linenos">5164</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">):</span>
-</span><span id="L-5165"><a href="#L-5165"><span class="linenos">5165</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5166"><a href="#L-5166"><span class="linenos">5166</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="L-5167"><a href="#L-5167"><span class="linenos">5167</span></a>
-</span><span id="L-5168"><a href="#L-5168"><span class="linenos">5168</span></a> <span class="k">def</span> <span class="nf">_parse_star</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5169"><a href="#L-5169"><span class="linenos">5169</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">):</span>
-</span><span id="L-5170"><a href="#L-5170"><span class="linenos">5170</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5171"><a href="#L-5171"><span class="linenos">5171</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="L-5172"><a href="#L-5172"><span class="linenos">5172</span></a>
-</span><span id="L-5173"><a href="#L-5173"><span class="linenos">5173</span></a> <span class="k">def</span> <span class="nf">_parse_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Parameter</span><span class="p">:</span>
-</span><span id="L-5174"><a href="#L-5174"><span class="linenos">5174</span></a> <span class="k">def</span> <span class="nf">_parse_parameter_part</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5175"><a href="#L-5175"><span class="linenos">5175</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="L-5176"><a href="#L-5176"><span class="linenos">5176</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-5177"><a href="#L-5177"><span class="linenos">5177</span></a> <span class="p">)</span>
-</span><span id="L-5178"><a href="#L-5178"><span class="linenos">5178</span></a>
-</span><span id="L-5179"><a href="#L-5179"><span class="linenos">5179</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)</span>
-</span><span id="L-5180"><a href="#L-5180"><span class="linenos">5180</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
-</span><span id="L-5181"><a href="#L-5181"><span class="linenos">5181</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
-</span><span id="L-5182"><a href="#L-5182"><span class="linenos">5182</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">)</span>
-</span><span id="L-5183"><a href="#L-5183"><span class="linenos">5183</span></a>
-</span><span id="L-5184"><a href="#L-5184"><span class="linenos">5184</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Parameter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-5131"><a href="#L-5131"><span class="linenos">5131</span></a> <span class="k">def</span> <span class="nf">_parse_string_as_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]:</span>
+</span><span id="L-5132"><a href="#L-5132"><span class="linenos">5132</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5133"><a href="#L-5133"><span class="linenos">5133</span></a>
+</span><span id="L-5134"><a href="#L-5134"><span class="linenos">5134</span></a> <span class="k">def</span> <span class="nf">_parse_number</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5135"><a href="#L-5135"><span class="linenos">5135</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">):</span>
+</span><span id="L-5136"><a href="#L-5136"><span class="linenos">5136</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5137"><a href="#L-5137"><span class="linenos">5137</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-5138"><a href="#L-5138"><span class="linenos">5138</span></a>
+</span><span id="L-5139"><a href="#L-5139"><span class="linenos">5139</span></a> <span class="k">def</span> <span class="nf">_parse_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5140"><a href="#L-5140"><span class="linenos">5140</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">):</span>
+</span><span id="L-5141"><a href="#L-5141"><span class="linenos">5141</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5142"><a href="#L-5142"><span class="linenos">5142</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-5143"><a href="#L-5143"><span class="linenos">5143</span></a>
+</span><span id="L-5144"><a href="#L-5144"><span class="linenos">5144</span></a> <span class="k">def</span> <span class="nf">_parse_var</span><span class="p">(</span>
+</span><span id="L-5145"><a href="#L-5145"><span class="linenos">5145</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="L-5146"><a href="#L-5146"><span class="linenos">5146</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-5147"><a href="#L-5147"><span class="linenos">5147</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5148"><a href="#L-5148"><span class="linenos">5148</span></a> <span class="n">upper</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-5149"><a href="#L-5149"><span class="linenos">5149</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5150"><a href="#L-5150"><span class="linenos">5150</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-5151"><a href="#L-5151"><span class="linenos">5151</span></a> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span>
+</span><span id="L-5152"><a href="#L-5152"><span class="linenos">5152</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
+</span><span id="L-5153"><a href="#L-5153"><span class="linenos">5153</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="k">if</span> <span class="n">tokens</span> <span class="k">else</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="L-5154"><a href="#L-5154"><span class="linenos">5154</span></a> <span class="p">):</span>
+</span><span id="L-5155"><a href="#L-5155"><span class="linenos">5155</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5156"><a href="#L-5156"><span class="linenos">5156</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">upper</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
+</span><span id="L-5157"><a href="#L-5157"><span class="linenos">5157</span></a> <span class="p">)</span>
+</span><span id="L-5158"><a href="#L-5158"><span class="linenos">5158</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-5159"><a href="#L-5159"><span class="linenos">5159</span></a>
+</span><span id="L-5160"><a href="#L-5160"><span class="linenos">5160</span></a> <span class="k">def</span> <span class="nf">_advance_any</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ignore_reserved</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
+</span><span id="L-5161"><a href="#L-5161"><span class="linenos">5161</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="p">(</span><span class="n">ignore_reserved</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_TOKENS</span><span class="p">):</span>
+</span><span id="L-5162"><a href="#L-5162"><span class="linenos">5162</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5163"><a href="#L-5163"><span class="linenos">5163</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="L-5164"><a href="#L-5164"><span class="linenos">5164</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5165"><a href="#L-5165"><span class="linenos">5165</span></a>
+</span><span id="L-5166"><a href="#L-5166"><span class="linenos">5166</span></a> <span class="k">def</span> <span class="nf">_parse_var_or_string</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5167"><a href="#L-5167"><span class="linenos">5167</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="L-5168"><a href="#L-5168"><span class="linenos">5168</span></a>
+</span><span id="L-5169"><a href="#L-5169"><span class="linenos">5169</span></a> <span class="k">def</span> <span class="nf">_parse_null</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5170"><a href="#L-5170"><span class="linenos">5170</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NULL_TOKENS</span><span class="p">):</span>
+</span><span id="L-5171"><a href="#L-5171"><span class="linenos">5171</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5172"><a href="#L-5172"><span class="linenos">5172</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-5173"><a href="#L-5173"><span class="linenos">5173</span></a>
+</span><span id="L-5174"><a href="#L-5174"><span class="linenos">5174</span></a> <span class="k">def</span> <span class="nf">_parse_boolean</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5175"><a href="#L-5175"><span class="linenos">5175</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">):</span>
+</span><span id="L-5176"><a href="#L-5176"><span class="linenos">5176</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5177"><a href="#L-5177"><span class="linenos">5177</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">):</span>
+</span><span id="L-5178"><a href="#L-5178"><span class="linenos">5178</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5179"><a href="#L-5179"><span class="linenos">5179</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="L-5180"><a href="#L-5180"><span class="linenos">5180</span></a>
+</span><span id="L-5181"><a href="#L-5181"><span class="linenos">5181</span></a> <span class="k">def</span> <span class="nf">_parse_star</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5182"><a href="#L-5182"><span class="linenos">5182</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">):</span>
+</span><span id="L-5183"><a href="#L-5183"><span class="linenos">5183</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5184"><a href="#L-5184"><span class="linenos">5184</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="L-5185"><a href="#L-5185"><span class="linenos">5185</span></a>
-</span><span id="L-5186"><a href="#L-5186"><span class="linenos">5186</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5187"><a href="#L-5187"><span class="linenos">5187</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">):</span>
-</span><span id="L-5188"><a href="#L-5188"><span class="linenos">5188</span></a> <span class="n">placeholder</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="L-5189"><a href="#L-5189"><span class="linenos">5189</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
-</span><span id="L-5190"><a href="#L-5190"><span class="linenos">5190</span></a> <span class="k">return</span> <span class="n">placeholder</span>
-</span><span id="L-5191"><a href="#L-5191"><span class="linenos">5191</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
-</span><span id="L-5192"><a href="#L-5192"><span class="linenos">5192</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5193"><a href="#L-5193"><span class="linenos">5193</span></a>
-</span><span id="L-5194"><a href="#L-5194"><span class="linenos">5194</span></a> <span class="k">def</span> <span class="nf">_parse_except</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="L-5195"><a href="#L-5195"><span class="linenos">5195</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">):</span>
-</span><span id="L-5196"><a href="#L-5196"><span class="linenos">5196</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5197"><a href="#L-5197"><span class="linenos">5197</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-5198"><a href="#L-5198"><span class="linenos">5198</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="L-5199"><a href="#L-5199"><span class="linenos">5199</span></a>
-</span><span id="L-5200"><a href="#L-5200"><span class="linenos">5200</span></a> <span class="n">except_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-5201"><a href="#L-5201"><span class="linenos">5201</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">except_column</span><span class="p">]</span> <span class="k">if</span> <span class="n">except_column</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-5202"><a href="#L-5202"><span class="linenos">5202</span></a>
-</span><span id="L-5203"><a href="#L-5203"><span class="linenos">5203</span></a> <span class="k">def</span> <span class="nf">_parse_replace</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="L-5204"><a href="#L-5204"><span class="linenos">5204</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">):</span>
-</span><span id="L-5205"><a href="#L-5205"><span class="linenos">5205</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5206"><a href="#L-5206"><span class="linenos">5206</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-5207"><a href="#L-5207"><span class="linenos">5207</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">)</span>
-</span><span id="L-5208"><a href="#L-5208"><span class="linenos">5208</span></a>
-</span><span id="L-5209"><a href="#L-5209"><span class="linenos">5209</span></a> <span class="n">replace_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
-</span><span id="L-5210"><a href="#L-5210"><span class="linenos">5210</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">replace_expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">replace_expression</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-5211"><a href="#L-5211"><span class="linenos">5211</span></a>
-</span><span id="L-5212"><a href="#L-5212"><span class="linenos">5212</span></a> <span class="k">def</span> <span class="nf">_parse_csv</span><span class="p">(</span>
-</span><span id="L-5213"><a href="#L-5213"><span class="linenos">5213</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span>
-</span><span id="L-5214"><a href="#L-5214"><span class="linenos">5214</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5215"><a href="#L-5215"><span class="linenos">5215</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="L-5216"><a href="#L-5216"><span class="linenos">5216</span></a> <span class="n">items</span> <span class="o">=</span> <span class="p">[</span><span class="n">parse_result</span><span class="p">]</span> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
-</span><span id="L-5217"><a href="#L-5217"><span class="linenos">5217</span></a>
-</span><span id="L-5218"><a href="#L-5218"><span class="linenos">5218</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">sep</span><span class="p">):</span>
-</span><span id="L-5219"><a href="#L-5219"><span class="linenos">5219</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
-</span><span id="L-5220"><a href="#L-5220"><span class="linenos">5220</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="L-5221"><a href="#L-5221"><span class="linenos">5221</span></a> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-5222"><a href="#L-5222"><span class="linenos">5222</span></a> <span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
-</span><span id="L-5223"><a href="#L-5223"><span class="linenos">5223</span></a>
-</span><span id="L-5224"><a href="#L-5224"><span class="linenos">5224</span></a> <span class="k">return</span> <span class="n">items</span>
-</span><span id="L-5225"><a href="#L-5225"><span class="linenos">5225</span></a>
-</span><span id="L-5226"><a href="#L-5226"><span class="linenos">5226</span></a> <span class="k">def</span> <span class="nf">_parse_tokens</span><span class="p">(</span>
-</span><span id="L-5227"><a href="#L-5227"><span class="linenos">5227</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
-</span><span id="L-5228"><a href="#L-5228"><span class="linenos">5228</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5229"><a href="#L-5229"><span class="linenos">5229</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="L-5186"><a href="#L-5186"><span class="linenos">5186</span></a> <span class="k">def</span> <span class="nf">_parse_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Parameter</span><span class="p">:</span>
+</span><span id="L-5187"><a href="#L-5187"><span class="linenos">5187</span></a> <span class="k">def</span> <span class="nf">_parse_parameter_part</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5188"><a href="#L-5188"><span class="linenos">5188</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="L-5189"><a href="#L-5189"><span class="linenos">5189</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5190"><a href="#L-5190"><span class="linenos">5190</span></a> <span class="p">)</span>
+</span><span id="L-5191"><a href="#L-5191"><span class="linenos">5191</span></a>
+</span><span id="L-5192"><a href="#L-5192"><span class="linenos">5192</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)</span>
+</span><span id="L-5193"><a href="#L-5193"><span class="linenos">5193</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
+</span><span id="L-5194"><a href="#L-5194"><span class="linenos">5194</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
+</span><span id="L-5195"><a href="#L-5195"><span class="linenos">5195</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">)</span>
+</span><span id="L-5196"><a href="#L-5196"><span class="linenos">5196</span></a>
+</span><span id="L-5197"><a href="#L-5197"><span class="linenos">5197</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Parameter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-5198"><a href="#L-5198"><span class="linenos">5198</span></a>
+</span><span id="L-5199"><a href="#L-5199"><span class="linenos">5199</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5200"><a href="#L-5200"><span class="linenos">5200</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">):</span>
+</span><span id="L-5201"><a href="#L-5201"><span class="linenos">5201</span></a> <span class="n">placeholder</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-5202"><a href="#L-5202"><span class="linenos">5202</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
+</span><span id="L-5203"><a href="#L-5203"><span class="linenos">5203</span></a> <span class="k">return</span> <span class="n">placeholder</span>
+</span><span id="L-5204"><a href="#L-5204"><span class="linenos">5204</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
+</span><span id="L-5205"><a href="#L-5205"><span class="linenos">5205</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5206"><a href="#L-5206"><span class="linenos">5206</span></a>
+</span><span id="L-5207"><a href="#L-5207"><span class="linenos">5207</span></a> <span class="k">def</span> <span class="nf">_parse_except</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-5208"><a href="#L-5208"><span class="linenos">5208</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">):</span>
+</span><span id="L-5209"><a href="#L-5209"><span class="linenos">5209</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5210"><a href="#L-5210"><span class="linenos">5210</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-5211"><a href="#L-5211"><span class="linenos">5211</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="L-5212"><a href="#L-5212"><span class="linenos">5212</span></a>
+</span><span id="L-5213"><a href="#L-5213"><span class="linenos">5213</span></a> <span class="n">except_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-5214"><a href="#L-5214"><span class="linenos">5214</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">except_column</span><span class="p">]</span> <span class="k">if</span> <span class="n">except_column</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-5215"><a href="#L-5215"><span class="linenos">5215</span></a>
+</span><span id="L-5216"><a href="#L-5216"><span class="linenos">5216</span></a> <span class="k">def</span> <span class="nf">_parse_replace</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="L-5217"><a href="#L-5217"><span class="linenos">5217</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">):</span>
+</span><span id="L-5218"><a href="#L-5218"><span class="linenos">5218</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5219"><a href="#L-5219"><span class="linenos">5219</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-5220"><a href="#L-5220"><span class="linenos">5220</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">)</span>
+</span><span id="L-5221"><a href="#L-5221"><span class="linenos">5221</span></a>
+</span><span id="L-5222"><a href="#L-5222"><span class="linenos">5222</span></a> <span class="n">replace_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
+</span><span id="L-5223"><a href="#L-5223"><span class="linenos">5223</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">replace_expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">replace_expression</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-5224"><a href="#L-5224"><span class="linenos">5224</span></a>
+</span><span id="L-5225"><a href="#L-5225"><span class="linenos">5225</span></a> <span class="k">def</span> <span class="nf">_parse_csv</span><span class="p">(</span>
+</span><span id="L-5226"><a href="#L-5226"><span class="linenos">5226</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span>
+</span><span id="L-5227"><a href="#L-5227"><span class="linenos">5227</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5228"><a href="#L-5228"><span class="linenos">5228</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="L-5229"><a href="#L-5229"><span class="linenos">5229</span></a> <span class="n">items</span> <span class="o">=</span> <span class="p">[</span><span class="n">parse_result</span><span class="p">]</span> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
</span><span id="L-5230"><a href="#L-5230"><span class="linenos">5230</span></a>
-</span><span id="L-5231"><a href="#L-5231"><span class="linenos">5231</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="L-5232"><a href="#L-5232"><span class="linenos">5232</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5233"><a href="#L-5233"><span class="linenos">5233</span></a> <span class="n">expressions</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
-</span><span id="L-5234"><a href="#L-5234"><span class="linenos">5234</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-5235"><a href="#L-5235"><span class="linenos">5235</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
-</span><span id="L-5236"><a href="#L-5236"><span class="linenos">5236</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
-</span><span id="L-5237"><a href="#L-5237"><span class="linenos">5237</span></a> <span class="p">)</span>
+</span><span id="L-5231"><a href="#L-5231"><span class="linenos">5231</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">sep</span><span class="p">):</span>
+</span><span id="L-5232"><a href="#L-5232"><span class="linenos">5232</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
+</span><span id="L-5233"><a href="#L-5233"><span class="linenos">5233</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="L-5234"><a href="#L-5234"><span class="linenos">5234</span></a> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-5235"><a href="#L-5235"><span class="linenos">5235</span></a> <span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
+</span><span id="L-5236"><a href="#L-5236"><span class="linenos">5236</span></a>
+</span><span id="L-5237"><a href="#L-5237"><span class="linenos">5237</span></a> <span class="k">return</span> <span class="n">items</span>
</span><span id="L-5238"><a href="#L-5238"><span class="linenos">5238</span></a>
-</span><span id="L-5239"><a href="#L-5239"><span class="linenos">5239</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-5240"><a href="#L-5240"><span class="linenos">5240</span></a>
-</span><span id="L-5241"><a href="#L-5241"><span class="linenos">5241</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5242"><a href="#L-5242"><span class="linenos">5242</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
+</span><span id="L-5239"><a href="#L-5239"><span class="linenos">5239</span></a> <span class="k">def</span> <span class="nf">_parse_tokens</span><span class="p">(</span>
+</span><span id="L-5240"><a href="#L-5240"><span class="linenos">5240</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
+</span><span id="L-5241"><a href="#L-5241"><span class="linenos">5241</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5242"><a href="#L-5242"><span class="linenos">5242</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="L-5243"><a href="#L-5243"><span class="linenos">5243</span></a>
-</span><span id="L-5244"><a href="#L-5244"><span class="linenos">5244</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
-</span><span id="L-5245"><a href="#L-5245"><span class="linenos">5245</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-5246"><a href="#L-5246"><span class="linenos">5246</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5247"><a href="#L-5247"><span class="linenos">5247</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
-</span><span id="L-5248"><a href="#L-5248"><span class="linenos">5248</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">parse_method</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">),</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span>
-</span><span id="L-5249"><a href="#L-5249"><span class="linenos">5249</span></a> <span class="p">)</span>
-</span><span id="L-5250"><a href="#L-5250"><span class="linenos">5250</span></a>
-</span><span id="L-5251"><a href="#L-5251"><span class="linenos">5251</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">:</span>
-</span><span id="L-5252"><a href="#L-5252"><span class="linenos">5252</span></a> <span class="n">wrapped</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
-</span><span id="L-5253"><a href="#L-5253"><span class="linenos">5253</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">wrapped</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">optional</span><span class="p">:</span>
-</span><span id="L-5254"><a href="#L-5254"><span class="linenos">5254</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting (&quot;</span><span class="p">)</span>
-</span><span id="L-5255"><a href="#L-5255"><span class="linenos">5255</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="L-5256"><a href="#L-5256"><span class="linenos">5256</span></a> <span class="k">if</span> <span class="n">wrapped</span><span class="p">:</span>
-</span><span id="L-5257"><a href="#L-5257"><span class="linenos">5257</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-5258"><a href="#L-5258"><span class="linenos">5258</span></a> <span class="k">return</span> <span class="n">parse_result</span>
-</span><span id="L-5259"><a href="#L-5259"><span class="linenos">5259</span></a>
-</span><span id="L-5260"><a href="#L-5260"><span class="linenos">5260</span></a> <span class="k">def</span> <span class="nf">_parse_expressions</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5261"><a href="#L-5261"><span class="linenos">5261</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">)</span>
-</span><span id="L-5262"><a href="#L-5262"><span class="linenos">5262</span></a>
-</span><span id="L-5263"><a href="#L-5263"><span class="linenos">5263</span></a> <span class="k">def</span> <span class="nf">_parse_select_or_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5264"><a href="#L-5264"><span class="linenos">5264</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
-</span><span id="L-5265"><a href="#L-5265"><span class="linenos">5265</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="L-5266"><a href="#L-5266"><span class="linenos">5266</span></a> <span class="p">)</span>
-</span><span id="L-5267"><a href="#L-5267"><span class="linenos">5267</span></a>
-</span><span id="L-5268"><a href="#L-5268"><span class="linenos">5268</span></a> <span class="k">def</span> <span class="nf">_parse_ddl_select</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5269"><a href="#L-5269"><span class="linenos">5269</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span>
-</span><span id="L-5270"><a href="#L-5270"><span class="linenos">5270</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="L-5271"><a href="#L-5271"><span class="linenos">5271</span></a> <span class="p">)</span>
+</span><span id="L-5244"><a href="#L-5244"><span class="linenos">5244</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="L-5245"><a href="#L-5245"><span class="linenos">5245</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5246"><a href="#L-5246"><span class="linenos">5246</span></a> <span class="n">expressions</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
+</span><span id="L-5247"><a href="#L-5247"><span class="linenos">5247</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-5248"><a href="#L-5248"><span class="linenos">5248</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
+</span><span id="L-5249"><a href="#L-5249"><span class="linenos">5249</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
+</span><span id="L-5250"><a href="#L-5250"><span class="linenos">5250</span></a> <span class="p">)</span>
+</span><span id="L-5251"><a href="#L-5251"><span class="linenos">5251</span></a>
+</span><span id="L-5252"><a href="#L-5252"><span class="linenos">5252</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-5253"><a href="#L-5253"><span class="linenos">5253</span></a>
+</span><span id="L-5254"><a href="#L-5254"><span class="linenos">5254</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5255"><a href="#L-5255"><span class="linenos">5255</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
+</span><span id="L-5256"><a href="#L-5256"><span class="linenos">5256</span></a>
+</span><span id="L-5257"><a href="#L-5257"><span class="linenos">5257</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
+</span><span id="L-5258"><a href="#L-5258"><span class="linenos">5258</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-5259"><a href="#L-5259"><span class="linenos">5259</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5260"><a href="#L-5260"><span class="linenos">5260</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
+</span><span id="L-5261"><a href="#L-5261"><span class="linenos">5261</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">parse_method</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">),</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span>
+</span><span id="L-5262"><a href="#L-5262"><span class="linenos">5262</span></a> <span class="p">)</span>
+</span><span id="L-5263"><a href="#L-5263"><span class="linenos">5263</span></a>
+</span><span id="L-5264"><a href="#L-5264"><span class="linenos">5264</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">:</span>
+</span><span id="L-5265"><a href="#L-5265"><span class="linenos">5265</span></a> <span class="n">wrapped</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
+</span><span id="L-5266"><a href="#L-5266"><span class="linenos">5266</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">wrapped</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">optional</span><span class="p">:</span>
+</span><span id="L-5267"><a href="#L-5267"><span class="linenos">5267</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting (&quot;</span><span class="p">)</span>
+</span><span id="L-5268"><a href="#L-5268"><span class="linenos">5268</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="L-5269"><a href="#L-5269"><span class="linenos">5269</span></a> <span class="k">if</span> <span class="n">wrapped</span><span class="p">:</span>
+</span><span id="L-5270"><a href="#L-5270"><span class="linenos">5270</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-5271"><a href="#L-5271"><span class="linenos">5271</span></a> <span class="k">return</span> <span class="n">parse_result</span>
</span><span id="L-5272"><a href="#L-5272"><span class="linenos">5272</span></a>
-</span><span id="L-5273"><a href="#L-5273"><span class="linenos">5273</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="L-5274"><a href="#L-5274"><span class="linenos">5274</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5275"><a href="#L-5275"><span class="linenos">5275</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_KIND</span><span class="p">):</span>
-</span><span id="L-5276"><a href="#L-5276"><span class="linenos">5276</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-5277"><a href="#L-5277"><span class="linenos">5277</span></a>
-</span><span id="L-5278"><a href="#L-5278"><span class="linenos">5278</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
-</span><span id="L-5279"><a href="#L-5279"><span class="linenos">5279</span></a>
-</span><span id="L-5280"><a href="#L-5280"><span class="linenos">5280</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-5281"><a href="#L-5281"><span class="linenos">5281</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-5282"><a href="#L-5282"><span class="linenos">5282</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-5283"><a href="#L-5283"><span class="linenos">5283</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">):</span>
-</span><span id="L-5284"><a href="#L-5284"><span class="linenos">5284</span></a> <span class="n">mode</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-5273"><a href="#L-5273"><span class="linenos">5273</span></a> <span class="k">def</span> <span class="nf">_parse_expressions</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5274"><a href="#L-5274"><span class="linenos">5274</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">)</span>
+</span><span id="L-5275"><a href="#L-5275"><span class="linenos">5275</span></a>
+</span><span id="L-5276"><a href="#L-5276"><span class="linenos">5276</span></a> <span class="k">def</span> <span class="nf">_parse_select_or_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5277"><a href="#L-5277"><span class="linenos">5277</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
+</span><span id="L-5278"><a href="#L-5278"><span class="linenos">5278</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-5279"><a href="#L-5279"><span class="linenos">5279</span></a> <span class="p">)</span>
+</span><span id="L-5280"><a href="#L-5280"><span class="linenos">5280</span></a>
+</span><span id="L-5281"><a href="#L-5281"><span class="linenos">5281</span></a> <span class="k">def</span> <span class="nf">_parse_ddl_select</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5282"><a href="#L-5282"><span class="linenos">5282</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span>
+</span><span id="L-5283"><a href="#L-5283"><span class="linenos">5283</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="L-5284"><a href="#L-5284"><span class="linenos">5284</span></a> <span class="p">)</span>
</span><span id="L-5285"><a href="#L-5285"><span class="linenos">5285</span></a>
-</span><span id="L-5286"><a href="#L-5286"><span class="linenos">5286</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
-</span><span id="L-5287"><a href="#L-5287"><span class="linenos">5287</span></a> <span class="n">modes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mode</span><span class="p">))</span>
-</span><span id="L-5288"><a href="#L-5288"><span class="linenos">5288</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="L-5289"><a href="#L-5289"><span class="linenos">5289</span></a> <span class="k">break</span>
+</span><span id="L-5286"><a href="#L-5286"><span class="linenos">5286</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="L-5287"><a href="#L-5287"><span class="linenos">5287</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5288"><a href="#L-5288"><span class="linenos">5288</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_KIND</span><span class="p">):</span>
+</span><span id="L-5289"><a href="#L-5289"><span class="linenos">5289</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="L-5290"><a href="#L-5290"><span class="linenos">5290</span></a>
-</span><span id="L-5291"><a href="#L-5291"><span class="linenos">5291</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">modes</span><span class="o">=</span><span class="n">modes</span><span class="p">)</span>
+</span><span id="L-5291"><a href="#L-5291"><span class="linenos">5291</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
</span><span id="L-5292"><a href="#L-5292"><span class="linenos">5292</span></a>
-</span><span id="L-5293"><a href="#L-5293"><span class="linenos">5293</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
-</span><span id="L-5294"><a href="#L-5294"><span class="linenos">5294</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5295"><a href="#L-5295"><span class="linenos">5295</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5296"><a href="#L-5296"><span class="linenos">5296</span></a> <span class="n">is_rollback</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span>
-</span><span id="L-5297"><a href="#L-5297"><span class="linenos">5297</span></a>
-</span><span id="L-5298"><a href="#L-5298"><span class="linenos">5298</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
-</span><span id="L-5299"><a href="#L-5299"><span class="linenos">5299</span></a>
-</span><span id="L-5300"><a href="#L-5300"><span class="linenos">5300</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
-</span><span id="L-5301"><a href="#L-5301"><span class="linenos">5301</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SAVEPOINT&quot;</span><span class="p">)</span>
-</span><span id="L-5302"><a href="#L-5302"><span class="linenos">5302</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-5293"><a href="#L-5293"><span class="linenos">5293</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-5294"><a href="#L-5294"><span class="linenos">5294</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-5295"><a href="#L-5295"><span class="linenos">5295</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-5296"><a href="#L-5296"><span class="linenos">5296</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">):</span>
+</span><span id="L-5297"><a href="#L-5297"><span class="linenos">5297</span></a> <span class="n">mode</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-5298"><a href="#L-5298"><span class="linenos">5298</span></a>
+</span><span id="L-5299"><a href="#L-5299"><span class="linenos">5299</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
+</span><span id="L-5300"><a href="#L-5300"><span class="linenos">5300</span></a> <span class="n">modes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mode</span><span class="p">))</span>
+</span><span id="L-5301"><a href="#L-5301"><span class="linenos">5301</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="L-5302"><a href="#L-5302"><span class="linenos">5302</span></a> <span class="k">break</span>
</span><span id="L-5303"><a href="#L-5303"><span class="linenos">5303</span></a>
-</span><span id="L-5304"><a href="#L-5304"><span class="linenos">5304</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">):</span>
-</span><span id="L-5305"><a href="#L-5305"><span class="linenos">5305</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">)</span>
-</span><span id="L-5306"><a href="#L-5306"><span class="linenos">5306</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHAIN&quot;</span><span class="p">)</span>
-</span><span id="L-5307"><a href="#L-5307"><span class="linenos">5307</span></a>
-</span><span id="L-5308"><a href="#L-5308"><span class="linenos">5308</span></a> <span class="k">if</span> <span class="n">is_rollback</span><span class="p">:</span>
-</span><span id="L-5309"><a href="#L-5309"><span class="linenos">5309</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">,</span> <span class="n">savepoint</span><span class="o">=</span><span class="n">savepoint</span><span class="p">)</span>
+</span><span id="L-5304"><a href="#L-5304"><span class="linenos">5304</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">modes</span><span class="o">=</span><span class="n">modes</span><span class="p">)</span>
+</span><span id="L-5305"><a href="#L-5305"><span class="linenos">5305</span></a>
+</span><span id="L-5306"><a href="#L-5306"><span class="linenos">5306</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
+</span><span id="L-5307"><a href="#L-5307"><span class="linenos">5307</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5308"><a href="#L-5308"><span class="linenos">5308</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5309"><a href="#L-5309"><span class="linenos">5309</span></a> <span class="n">is_rollback</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span>
</span><span id="L-5310"><a href="#L-5310"><span class="linenos">5310</span></a>
-</span><span id="L-5311"><a href="#L-5311"><span class="linenos">5311</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Commit</span><span class="p">,</span> <span class="n">chain</span><span class="o">=</span><span class="n">chain</span><span class="p">)</span>
+</span><span id="L-5311"><a href="#L-5311"><span class="linenos">5311</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
</span><span id="L-5312"><a href="#L-5312"><span class="linenos">5312</span></a>
-</span><span id="L-5313"><a href="#L-5313"><span class="linenos">5313</span></a> <span class="k">def</span> <span class="nf">_parse_refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Refresh</span><span class="p">:</span>
-</span><span id="L-5314"><a href="#L-5314"><span class="linenos">5314</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
-</span><span id="L-5315"><a href="#L-5315"><span class="linenos">5315</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Refresh</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
+</span><span id="L-5313"><a href="#L-5313"><span class="linenos">5313</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
+</span><span id="L-5314"><a href="#L-5314"><span class="linenos">5314</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SAVEPOINT&quot;</span><span class="p">)</span>
+</span><span id="L-5315"><a href="#L-5315"><span class="linenos">5315</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="L-5316"><a href="#L-5316"><span class="linenos">5316</span></a>
-</span><span id="L-5317"><a href="#L-5317"><span class="linenos">5317</span></a> <span class="k">def</span> <span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5318"><a href="#L-5318"><span class="linenos">5318</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">):</span>
-</span><span id="L-5319"><a href="#L-5319"><span class="linenos">5319</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5317"><a href="#L-5317"><span class="linenos">5317</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">):</span>
+</span><span id="L-5318"><a href="#L-5318"><span class="linenos">5318</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">)</span>
+</span><span id="L-5319"><a href="#L-5319"><span class="linenos">5319</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHAIN&quot;</span><span class="p">)</span>
</span><span id="L-5320"><a href="#L-5320"><span class="linenos">5320</span></a>
-</span><span id="L-5321"><a href="#L-5321"><span class="linenos">5321</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">)</span>
-</span><span id="L-5322"><a href="#L-5322"><span class="linenos">5322</span></a> <span class="n">exists_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(</span><span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-5323"><a href="#L-5323"><span class="linenos">5323</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">()</span>
-</span><span id="L-5324"><a href="#L-5324"><span class="linenos">5324</span></a>
-</span><span id="L-5325"><a href="#L-5325"><span class="linenos">5325</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="L-5326"><a href="#L-5326"><span class="linenos">5326</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">,</span> <span class="n">exists_column</span><span class="p">)</span>
-</span><span id="L-5327"><a href="#L-5327"><span class="linenos">5327</span></a>
-</span><span id="L-5328"><a href="#L-5328"><span class="linenos">5328</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
-</span><span id="L-5329"><a href="#L-5329"><span class="linenos">5329</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="s2">&quot;AFTER&quot;</span><span class="p">)):</span>
-</span><span id="L-5330"><a href="#L-5330"><span class="linenos">5330</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="L-5331"><a href="#L-5331"><span class="linenos">5331</span></a> <span class="n">column_position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5332"><a href="#L-5332"><span class="linenos">5332</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span>
-</span><span id="L-5333"><a href="#L-5333"><span class="linenos">5333</span></a> <span class="p">)</span>
-</span><span id="L-5334"><a href="#L-5334"><span class="linenos">5334</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="n">column_position</span><span class="p">)</span>
-</span><span id="L-5335"><a href="#L-5335"><span class="linenos">5335</span></a>
-</span><span id="L-5336"><a href="#L-5336"><span class="linenos">5336</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-5321"><a href="#L-5321"><span class="linenos">5321</span></a> <span class="k">if</span> <span class="n">is_rollback</span><span class="p">:</span>
+</span><span id="L-5322"><a href="#L-5322"><span class="linenos">5322</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">,</span> <span class="n">savepoint</span><span class="o">=</span><span class="n">savepoint</span><span class="p">)</span>
+</span><span id="L-5323"><a href="#L-5323"><span class="linenos">5323</span></a>
+</span><span id="L-5324"><a href="#L-5324"><span class="linenos">5324</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Commit</span><span class="p">,</span> <span class="n">chain</span><span class="o">=</span><span class="n">chain</span><span class="p">)</span>
+</span><span id="L-5325"><a href="#L-5325"><span class="linenos">5325</span></a>
+</span><span id="L-5326"><a href="#L-5326"><span class="linenos">5326</span></a> <span class="k">def</span> <span class="nf">_parse_refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Refresh</span><span class="p">:</span>
+</span><span id="L-5327"><a href="#L-5327"><span class="linenos">5327</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
+</span><span id="L-5328"><a href="#L-5328"><span class="linenos">5328</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Refresh</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
+</span><span id="L-5329"><a href="#L-5329"><span class="linenos">5329</span></a>
+</span><span id="L-5330"><a href="#L-5330"><span class="linenos">5330</span></a> <span class="k">def</span> <span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5331"><a href="#L-5331"><span class="linenos">5331</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">):</span>
+</span><span id="L-5332"><a href="#L-5332"><span class="linenos">5332</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5333"><a href="#L-5333"><span class="linenos">5333</span></a>
+</span><span id="L-5334"><a href="#L-5334"><span class="linenos">5334</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">)</span>
+</span><span id="L-5335"><a href="#L-5335"><span class="linenos">5335</span></a> <span class="n">exists_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(</span><span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5336"><a href="#L-5336"><span class="linenos">5336</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">()</span>
</span><span id="L-5337"><a href="#L-5337"><span class="linenos">5337</span></a>
-</span><span id="L-5338"><a href="#L-5338"><span class="linenos">5338</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
-</span><span id="L-5339"><a href="#L-5339"><span class="linenos">5339</span></a> <span class="n">drop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop</span><span class="p">()</span>
-</span><span id="L-5340"><a href="#L-5340"><span class="linenos">5340</span></a> <span class="k">if</span> <span class="n">drop</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">drop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">):</span>
-</span><span id="L-5341"><a href="#L-5341"><span class="linenos">5341</span></a> <span class="n">drop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="n">drop</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMN&quot;</span><span class="p">))</span>
-</span><span id="L-5342"><a href="#L-5342"><span class="linenos">5342</span></a> <span class="k">return</span> <span class="n">drop</span>
-</span><span id="L-5343"><a href="#L-5343"><span class="linenos">5343</span></a>
-</span><span id="L-5344"><a href="#L-5344"><span class="linenos">5344</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
-</span><span id="L-5345"><a href="#L-5345"><span class="linenos">5345</span></a> <span class="k">def</span> <span class="nf">_parse_drop_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">:</span>
-</span><span id="L-5346"><a href="#L-5346"><span class="linenos">5346</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5347"><a href="#L-5347"><span class="linenos">5347</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">),</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span>
-</span><span id="L-5348"><a href="#L-5348"><span class="linenos">5348</span></a> <span class="p">)</span>
-</span><span id="L-5349"><a href="#L-5349"><span class="linenos">5349</span></a>
-</span><span id="L-5350"><a href="#L-5350"><span class="linenos">5350</span></a> <span class="k">def</span> <span class="nf">_parse_add_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">:</span>
-</span><span id="L-5351"><a href="#L-5351"><span class="linenos">5351</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5352"><a href="#L-5352"><span class="linenos">5352</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
-</span><span id="L-5353"><a href="#L-5353"><span class="linenos">5353</span></a>
-</span><span id="L-5354"><a href="#L-5354"><span class="linenos">5354</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">:</span>
-</span><span id="L-5355"><a href="#L-5355"><span class="linenos">5355</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-5338"><a href="#L-5338"><span class="linenos">5338</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="L-5339"><a href="#L-5339"><span class="linenos">5339</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">,</span> <span class="n">exists_column</span><span class="p">)</span>
+</span><span id="L-5340"><a href="#L-5340"><span class="linenos">5340</span></a>
+</span><span id="L-5341"><a href="#L-5341"><span class="linenos">5341</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
+</span><span id="L-5342"><a href="#L-5342"><span class="linenos">5342</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="s2">&quot;AFTER&quot;</span><span class="p">)):</span>
+</span><span id="L-5343"><a href="#L-5343"><span class="linenos">5343</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
+</span><span id="L-5344"><a href="#L-5344"><span class="linenos">5344</span></a> <span class="n">column_position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5345"><a href="#L-5345"><span class="linenos">5345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span>
+</span><span id="L-5346"><a href="#L-5346"><span class="linenos">5346</span></a> <span class="p">)</span>
+</span><span id="L-5347"><a href="#L-5347"><span class="linenos">5347</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="n">column_position</span><span class="p">)</span>
+</span><span id="L-5348"><a href="#L-5348"><span class="linenos">5348</span></a>
+</span><span id="L-5349"><a href="#L-5349"><span class="linenos">5349</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="L-5350"><a href="#L-5350"><span class="linenos">5350</span></a>
+</span><span id="L-5351"><a href="#L-5351"><span class="linenos">5351</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
+</span><span id="L-5352"><a href="#L-5352"><span class="linenos">5352</span></a> <span class="n">drop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop</span><span class="p">()</span>
+</span><span id="L-5353"><a href="#L-5353"><span class="linenos">5353</span></a> <span class="k">if</span> <span class="n">drop</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">drop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">):</span>
+</span><span id="L-5354"><a href="#L-5354"><span class="linenos">5354</span></a> <span class="n">drop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="n">drop</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMN&quot;</span><span class="p">))</span>
+</span><span id="L-5355"><a href="#L-5355"><span class="linenos">5355</span></a> <span class="k">return</span> <span class="n">drop</span>
</span><span id="L-5356"><a href="#L-5356"><span class="linenos">5356</span></a>
-</span><span id="L-5357"><a href="#L-5357"><span class="linenos">5357</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHECK&quot;</span><span class="p">):</span>
-</span><span id="L-5358"><a href="#L-5358"><span class="linenos">5358</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
-</span><span id="L-5359"><a href="#L-5359"><span class="linenos">5359</span></a> <span class="n">enforced</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENFORCED&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">False</span>
-</span><span id="L-5360"><a href="#L-5360"><span class="linenos">5360</span></a>
-</span><span id="L-5361"><a href="#L-5361"><span class="linenos">5361</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5362"><a href="#L-5362"><span class="linenos">5362</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">enforced</span><span class="o">=</span><span class="n">enforced</span>
-</span><span id="L-5363"><a href="#L-5363"><span class="linenos">5363</span></a> <span class="p">)</span>
-</span><span id="L-5364"><a href="#L-5364"><span class="linenos">5364</span></a>
-</span><span id="L-5365"><a href="#L-5365"><span class="linenos">5365</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">):</span>
-</span><span id="L-5366"><a href="#L-5366"><span class="linenos">5366</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_foreign_key</span><span class="p">()</span>
-</span><span id="L-5367"><a href="#L-5367"><span class="linenos">5367</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span><span class="p">):</span>
-</span><span id="L-5368"><a href="#L-5368"><span class="linenos">5368</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">()</span>
-</span><span id="L-5369"><a href="#L-5369"><span class="linenos">5369</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5370"><a href="#L-5370"><span class="linenos">5370</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5371"><a href="#L-5371"><span class="linenos">5371</span></a>
-</span><span id="L-5372"><a href="#L-5372"><span class="linenos">5372</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-5357"><a href="#L-5357"><span class="linenos">5357</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
+</span><span id="L-5358"><a href="#L-5358"><span class="linenos">5358</span></a> <span class="k">def</span> <span class="nf">_parse_drop_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">:</span>
+</span><span id="L-5359"><a href="#L-5359"><span class="linenos">5359</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5360"><a href="#L-5360"><span class="linenos">5360</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">),</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span>
+</span><span id="L-5361"><a href="#L-5361"><span class="linenos">5361</span></a> <span class="p">)</span>
+</span><span id="L-5362"><a href="#L-5362"><span class="linenos">5362</span></a>
+</span><span id="L-5363"><a href="#L-5363"><span class="linenos">5363</span></a> <span class="k">def</span> <span class="nf">_parse_add_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">:</span>
+</span><span id="L-5364"><a href="#L-5364"><span class="linenos">5364</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5365"><a href="#L-5365"><span class="linenos">5365</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="L-5366"><a href="#L-5366"><span class="linenos">5366</span></a>
+</span><span id="L-5367"><a href="#L-5367"><span class="linenos">5367</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">:</span>
+</span><span id="L-5368"><a href="#L-5368"><span class="linenos">5368</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-5369"><a href="#L-5369"><span class="linenos">5369</span></a>
+</span><span id="L-5370"><a href="#L-5370"><span class="linenos">5370</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHECK&quot;</span><span class="p">):</span>
+</span><span id="L-5371"><a href="#L-5371"><span class="linenos">5371</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="L-5372"><a href="#L-5372"><span class="linenos">5372</span></a> <span class="n">enforced</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENFORCED&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">False</span>
</span><span id="L-5373"><a href="#L-5373"><span class="linenos">5373</span></a>
-</span><span id="L-5374"><a href="#L-5374"><span class="linenos">5374</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_add</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5375"><a href="#L-5375"><span class="linenos">5375</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="L-5376"><a href="#L-5376"><span class="linenos">5376</span></a>
-</span><span id="L-5377"><a href="#L-5377"><span class="linenos">5377</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ADD_CONSTRAINT_TOKENS</span><span class="p">):</span>
-</span><span id="L-5378"><a href="#L-5378"><span class="linenos">5378</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_add_constraint</span><span class="p">)</span>
-</span><span id="L-5379"><a href="#L-5379"><span class="linenos">5379</span></a>
-</span><span id="L-5380"><a href="#L-5380"><span class="linenos">5380</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-5381"><a href="#L-5381"><span class="linenos">5381</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">):</span>
-</span><span id="L-5382"><a href="#L-5382"><span class="linenos">5382</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-5383"><a href="#L-5383"><span class="linenos">5383</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_add_column</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5374"><a href="#L-5374"><span class="linenos">5374</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5375"><a href="#L-5375"><span class="linenos">5375</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">enforced</span><span class="o">=</span><span class="n">enforced</span>
+</span><span id="L-5376"><a href="#L-5376"><span class="linenos">5376</span></a> <span class="p">)</span>
+</span><span id="L-5377"><a href="#L-5377"><span class="linenos">5377</span></a>
+</span><span id="L-5378"><a href="#L-5378"><span class="linenos">5378</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">):</span>
+</span><span id="L-5379"><a href="#L-5379"><span class="linenos">5379</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_foreign_key</span><span class="p">()</span>
+</span><span id="L-5380"><a href="#L-5380"><span class="linenos">5380</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span><span class="p">):</span>
+</span><span id="L-5381"><a href="#L-5381"><span class="linenos">5381</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">()</span>
+</span><span id="L-5382"><a href="#L-5382"><span class="linenos">5382</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5383"><a href="#L-5383"><span class="linenos">5383</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-5384"><a href="#L-5384"><span class="linenos">5384</span></a>
-</span><span id="L-5385"><a href="#L-5385"><span class="linenos">5385</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">:</span>
-</span><span id="L-5386"><a href="#L-5386"><span class="linenos">5386</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">)</span>
-</span><span id="L-5387"><a href="#L-5387"><span class="linenos">5387</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-5388"><a href="#L-5388"><span class="linenos">5388</span></a>
-</span><span id="L-5389"><a href="#L-5389"><span class="linenos">5389</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
-</span><span id="L-5390"><a href="#L-5390"><span class="linenos">5390</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">drop</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-5391"><a href="#L-5391"><span class="linenos">5391</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
-</span><span id="L-5392"><a href="#L-5392"><span class="linenos">5392</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="L-5393"><a href="#L-5393"><span class="linenos">5393</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span><span class="p">):</span>
-</span><span id="L-5394"><a href="#L-5394"><span class="linenos">5394</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="L-5395"><a href="#L-5395"><span class="linenos">5395</span></a>
-</span><span id="L-5396"><a href="#L-5396"><span class="linenos">5396</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">)</span>
-</span><span id="L-5397"><a href="#L-5397"><span class="linenos">5397</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5398"><a href="#L-5398"><span class="linenos">5398</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
-</span><span id="L-5399"><a href="#L-5399"><span class="linenos">5399</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
-</span><span id="L-5400"><a href="#L-5400"><span class="linenos">5400</span></a> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TYPE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(),</span>
-</span><span id="L-5401"><a href="#L-5401"><span class="linenos">5401</span></a> <span class="n">collate</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
-</span><span id="L-5402"><a href="#L-5402"><span class="linenos">5402</span></a> <span class="n">using</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="L-5403"><a href="#L-5403"><span class="linenos">5403</span></a> <span class="p">)</span>
-</span><span id="L-5404"><a href="#L-5404"><span class="linenos">5404</span></a>
-</span><span id="L-5405"><a href="#L-5405"><span class="linenos">5405</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_drop</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5406"><a href="#L-5406"><span class="linenos">5406</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="L-5407"><a href="#L-5407"><span class="linenos">5407</span></a>
-</span><span id="L-5408"><a href="#L-5408"><span class="linenos">5408</span></a> <span class="n">partition_exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
-</span><span id="L-5409"><a href="#L-5409"><span class="linenos">5409</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-5410"><a href="#L-5410"><span class="linenos">5410</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_partition</span><span class="p">(</span><span class="n">exists</span><span class="o">=</span><span class="n">partition_exists</span><span class="p">))</span>
-</span><span id="L-5411"><a href="#L-5411"><span class="linenos">5411</span></a>
-</span><span id="L-5412"><a href="#L-5412"><span class="linenos">5412</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-5413"><a href="#L-5413"><span class="linenos">5413</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_column</span><span class="p">)</span>
-</span><span id="L-5414"><a href="#L-5414"><span class="linenos">5414</span></a>
-</span><span id="L-5415"><a href="#L-5415"><span class="linenos">5415</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_rename</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">RenameTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">]:</span>
-</span><span id="L-5416"><a href="#L-5416"><span class="linenos">5416</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">):</span>
-</span><span id="L-5417"><a href="#L-5417"><span class="linenos">5417</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
-</span><span id="L-5418"><a href="#L-5418"><span class="linenos">5418</span></a> <span class="n">old_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-5419"><a href="#L-5419"><span class="linenos">5419</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
-</span><span id="L-5420"><a href="#L-5420"><span class="linenos">5420</span></a> <span class="n">new_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-5421"><a href="#L-5421"><span class="linenos">5421</span></a>
-</span><span id="L-5422"><a href="#L-5422"><span class="linenos">5422</span></a> <span class="k">if</span> <span class="n">old_column</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">to</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">new_column</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-5423"><a href="#L-5423"><span class="linenos">5423</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5385"><a href="#L-5385"><span class="linenos">5385</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-5386"><a href="#L-5386"><span class="linenos">5386</span></a>
+</span><span id="L-5387"><a href="#L-5387"><span class="linenos">5387</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_add</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5388"><a href="#L-5388"><span class="linenos">5388</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="L-5389"><a href="#L-5389"><span class="linenos">5389</span></a>
+</span><span id="L-5390"><a href="#L-5390"><span class="linenos">5390</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ADD_CONSTRAINT_TOKENS</span><span class="p">):</span>
+</span><span id="L-5391"><a href="#L-5391"><span class="linenos">5391</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_add_constraint</span><span class="p">)</span>
+</span><span id="L-5392"><a href="#L-5392"><span class="linenos">5392</span></a>
+</span><span id="L-5393"><a href="#L-5393"><span class="linenos">5393</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-5394"><a href="#L-5394"><span class="linenos">5394</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">):</span>
+</span><span id="L-5395"><a href="#L-5395"><span class="linenos">5395</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5396"><a href="#L-5396"><span class="linenos">5396</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_add_column</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5397"><a href="#L-5397"><span class="linenos">5397</span></a>
+</span><span id="L-5398"><a href="#L-5398"><span class="linenos">5398</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">:</span>
+</span><span id="L-5399"><a href="#L-5399"><span class="linenos">5399</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">)</span>
+</span><span id="L-5400"><a href="#L-5400"><span class="linenos">5400</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5401"><a href="#L-5401"><span class="linenos">5401</span></a>
+</span><span id="L-5402"><a href="#L-5402"><span class="linenos">5402</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
+</span><span id="L-5403"><a href="#L-5403"><span class="linenos">5403</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">drop</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5404"><a href="#L-5404"><span class="linenos">5404</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
+</span><span id="L-5405"><a href="#L-5405"><span class="linenos">5405</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="L-5406"><a href="#L-5406"><span class="linenos">5406</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span><span class="p">):</span>
+</span><span id="L-5407"><a href="#L-5407"><span class="linenos">5407</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="L-5408"><a href="#L-5408"><span class="linenos">5408</span></a>
+</span><span id="L-5409"><a href="#L-5409"><span class="linenos">5409</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">)</span>
+</span><span id="L-5410"><a href="#L-5410"><span class="linenos">5410</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5411"><a href="#L-5411"><span class="linenos">5411</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
+</span><span id="L-5412"><a href="#L-5412"><span class="linenos">5412</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
+</span><span id="L-5413"><a href="#L-5413"><span class="linenos">5413</span></a> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TYPE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(),</span>
+</span><span id="L-5414"><a href="#L-5414"><span class="linenos">5414</span></a> <span class="n">collate</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
+</span><span id="L-5415"><a href="#L-5415"><span class="linenos">5415</span></a> <span class="n">using</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="L-5416"><a href="#L-5416"><span class="linenos">5416</span></a> <span class="p">)</span>
+</span><span id="L-5417"><a href="#L-5417"><span class="linenos">5417</span></a>
+</span><span id="L-5418"><a href="#L-5418"><span class="linenos">5418</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_drop</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5419"><a href="#L-5419"><span class="linenos">5419</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="L-5420"><a href="#L-5420"><span class="linenos">5420</span></a>
+</span><span id="L-5421"><a href="#L-5421"><span class="linenos">5421</span></a> <span class="n">partition_exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
+</span><span id="L-5422"><a href="#L-5422"><span class="linenos">5422</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-5423"><a href="#L-5423"><span class="linenos">5423</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_partition</span><span class="p">(</span><span class="n">exists</span><span class="o">=</span><span class="n">partition_exists</span><span class="p">))</span>
</span><span id="L-5424"><a href="#L-5424"><span class="linenos">5424</span></a>
-</span><span id="L-5425"><a href="#L-5425"><span class="linenos">5425</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">old_column</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">new_column</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">)</span>
-</span><span id="L-5426"><a href="#L-5426"><span class="linenos">5426</span></a>
-</span><span id="L-5427"><a href="#L-5427"><span class="linenos">5427</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
-</span><span id="L-5428"><a href="#L-5428"><span class="linenos">5428</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RenameTable</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="L-5429"><a href="#L-5429"><span class="linenos">5429</span></a>
-</span><span id="L-5430"><a href="#L-5430"><span class="linenos">5430</span></a> <span class="k">def</span> <span class="nf">_parse_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="L-5431"><a href="#L-5431"><span class="linenos">5431</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="L-5432"><a href="#L-5432"><span class="linenos">5432</span></a>
-</span><span id="L-5433"><a href="#L-5433"><span class="linenos">5433</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">):</span>
-</span><span id="L-5434"><a href="#L-5434"><span class="linenos">5434</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
-</span><span id="L-5435"><a href="#L-5435"><span class="linenos">5435</span></a>
-</span><span id="L-5436"><a href="#L-5436"><span class="linenos">5436</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
-</span><span id="L-5437"><a href="#L-5437"><span class="linenos">5437</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
-</span><span id="L-5438"><a href="#L-5438"><span class="linenos">5438</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5425"><a href="#L-5425"><span class="linenos">5425</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-5426"><a href="#L-5426"><span class="linenos">5426</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_column</span><span class="p">)</span>
+</span><span id="L-5427"><a href="#L-5427"><span class="linenos">5427</span></a>
+</span><span id="L-5428"><a href="#L-5428"><span class="linenos">5428</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_rename</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">RenameTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">]:</span>
+</span><span id="L-5429"><a href="#L-5429"><span class="linenos">5429</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">):</span>
+</span><span id="L-5430"><a href="#L-5430"><span class="linenos">5430</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
+</span><span id="L-5431"><a href="#L-5431"><span class="linenos">5431</span></a> <span class="n">old_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-5432"><a href="#L-5432"><span class="linenos">5432</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
+</span><span id="L-5433"><a href="#L-5433"><span class="linenos">5433</span></a> <span class="n">new_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-5434"><a href="#L-5434"><span class="linenos">5434</span></a>
+</span><span id="L-5435"><a href="#L-5435"><span class="linenos">5435</span></a> <span class="k">if</span> <span class="n">old_column</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">to</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">new_column</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-5436"><a href="#L-5436"><span class="linenos">5436</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5437"><a href="#L-5437"><span class="linenos">5437</span></a>
+</span><span id="L-5438"><a href="#L-5438"><span class="linenos">5438</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">old_column</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">new_column</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">)</span>
</span><span id="L-5439"><a href="#L-5439"><span class="linenos">5439</span></a>
-</span><span id="L-5440"><a href="#L-5440"><span class="linenos">5440</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
-</span><span id="L-5441"><a href="#L-5441"><span class="linenos">5441</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5440"><a href="#L-5440"><span class="linenos">5440</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
+</span><span id="L-5441"><a href="#L-5441"><span class="linenos">5441</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RenameTable</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="L-5442"><a href="#L-5442"><span class="linenos">5442</span></a>
-</span><span id="L-5443"><a href="#L-5443"><span class="linenos">5443</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-5444"><a href="#L-5444"><span class="linenos">5444</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-5445"><a href="#L-5445"><span class="linenos">5445</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
-</span><span id="L-5446"><a href="#L-5446"><span class="linenos">5446</span></a>
-</span><span id="L-5447"><a href="#L-5447"><span class="linenos">5447</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">actions</span><span class="p">:</span>
-</span><span id="L-5448"><a href="#L-5448"><span class="linenos">5448</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5449"><a href="#L-5449"><span class="linenos">5449</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
-</span><span id="L-5450"><a href="#L-5450"><span class="linenos">5450</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-5451"><a href="#L-5451"><span class="linenos">5451</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
-</span><span id="L-5452"><a href="#L-5452"><span class="linenos">5452</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
-</span><span id="L-5453"><a href="#L-5453"><span class="linenos">5453</span></a> <span class="n">only</span><span class="o">=</span><span class="n">only</span><span class="p">,</span>
-</span><span id="L-5454"><a href="#L-5454"><span class="linenos">5454</span></a> <span class="p">)</span>
+</span><span id="L-5443"><a href="#L-5443"><span class="linenos">5443</span></a> <span class="k">def</span> <span class="nf">_parse_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="L-5444"><a href="#L-5444"><span class="linenos">5444</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="L-5445"><a href="#L-5445"><span class="linenos">5445</span></a>
+</span><span id="L-5446"><a href="#L-5446"><span class="linenos">5446</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">):</span>
+</span><span id="L-5447"><a href="#L-5447"><span class="linenos">5447</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
+</span><span id="L-5448"><a href="#L-5448"><span class="linenos">5448</span></a>
+</span><span id="L-5449"><a href="#L-5449"><span class="linenos">5449</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
+</span><span id="L-5450"><a href="#L-5450"><span class="linenos">5450</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
+</span><span id="L-5451"><a href="#L-5451"><span class="linenos">5451</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-5452"><a href="#L-5452"><span class="linenos">5452</span></a>
+</span><span id="L-5453"><a href="#L-5453"><span class="linenos">5453</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
+</span><span id="L-5454"><a href="#L-5454"><span class="linenos">5454</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="L-5455"><a href="#L-5455"><span class="linenos">5455</span></a>
-</span><span id="L-5456"><a href="#L-5456"><span class="linenos">5456</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
-</span><span id="L-5457"><a href="#L-5457"><span class="linenos">5457</span></a>
-</span><span id="L-5458"><a href="#L-5458"><span class="linenos">5458</span></a> <span class="k">def</span> <span class="nf">_parse_merge</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span>
-</span><span id="L-5459"><a href="#L-5459"><span class="linenos">5459</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">)</span>
-</span><span id="L-5460"><a href="#L-5460"><span class="linenos">5460</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="L-5461"><a href="#L-5461"><span class="linenos">5461</span></a>
-</span><span id="L-5462"><a href="#L-5462"><span class="linenos">5462</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-5463"><a href="#L-5463"><span class="linenos">5463</span></a> <span class="n">target</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
-</span><span id="L-5464"><a href="#L-5464"><span class="linenos">5464</span></a>
-</span><span id="L-5465"><a href="#L-5465"><span class="linenos">5465</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span>
-</span><span id="L-5466"><a href="#L-5466"><span class="linenos">5466</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="L-5467"><a href="#L-5467"><span class="linenos">5467</span></a>
-</span><span id="L-5468"><a href="#L-5468"><span class="linenos">5468</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
-</span><span id="L-5469"><a href="#L-5469"><span class="linenos">5469</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-5456"><a href="#L-5456"><span class="linenos">5456</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-5457"><a href="#L-5457"><span class="linenos">5457</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="L-5458"><a href="#L-5458"><span class="linenos">5458</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
+</span><span id="L-5459"><a href="#L-5459"><span class="linenos">5459</span></a>
+</span><span id="L-5460"><a href="#L-5460"><span class="linenos">5460</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">actions</span><span class="p">:</span>
+</span><span id="L-5461"><a href="#L-5461"><span class="linenos">5461</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5462"><a href="#L-5462"><span class="linenos">5462</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
+</span><span id="L-5463"><a href="#L-5463"><span class="linenos">5463</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-5464"><a href="#L-5464"><span class="linenos">5464</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
+</span><span id="L-5465"><a href="#L-5465"><span class="linenos">5465</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
+</span><span id="L-5466"><a href="#L-5466"><span class="linenos">5466</span></a> <span class="n">only</span><span class="o">=</span><span class="n">only</span><span class="p">,</span>
+</span><span id="L-5467"><a href="#L-5467"><span class="linenos">5467</span></a> <span class="p">)</span>
+</span><span id="L-5468"><a href="#L-5468"><span class="linenos">5468</span></a>
+</span><span id="L-5469"><a href="#L-5469"><span class="linenos">5469</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="L-5470"><a href="#L-5470"><span class="linenos">5470</span></a>
-</span><span id="L-5471"><a href="#L-5471"><span class="linenos">5471</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5472"><a href="#L-5472"><span class="linenos">5472</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
-</span><span id="L-5473"><a href="#L-5473"><span class="linenos">5473</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
-</span><span id="L-5474"><a href="#L-5474"><span class="linenos">5474</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
-</span><span id="L-5475"><a href="#L-5475"><span class="linenos">5475</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
-</span><span id="L-5476"><a href="#L-5476"><span class="linenos">5476</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_when_matched</span><span class="p">(),</span>
-</span><span id="L-5477"><a href="#L-5477"><span class="linenos">5477</span></a> <span class="p">)</span>
-</span><span id="L-5478"><a href="#L-5478"><span class="linenos">5478</span></a>
-</span><span id="L-5479"><a href="#L-5479"><span class="linenos">5479</span></a> <span class="k">def</span> <span class="nf">_parse_when_matched</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">]:</span>
-</span><span id="L-5480"><a href="#L-5480"><span class="linenos">5480</span></a> <span class="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-5481"><a href="#L-5481"><span class="linenos">5481</span></a>
-</span><span id="L-5482"><a href="#L-5482"><span class="linenos">5482</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">):</span>
-</span><span id="L-5483"><a href="#L-5483"><span class="linenos">5483</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
-</span><span id="L-5484"><a href="#L-5484"><span class="linenos">5484</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCHED&quot;</span><span class="p">)</span>
-</span><span id="L-5485"><a href="#L-5485"><span class="linenos">5485</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-5486"><a href="#L-5486"><span class="linenos">5486</span></a> <span class="kc">False</span>
-</span><span id="L-5487"><a href="#L-5487"><span class="linenos">5487</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;TARGET&quot;</span><span class="p">)</span>
-</span><span id="L-5488"><a href="#L-5488"><span class="linenos">5488</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;SOURCE&quot;</span><span class="p">)</span>
-</span><span id="L-5489"><a href="#L-5489"><span class="linenos">5489</span></a> <span class="p">)</span>
-</span><span id="L-5490"><a href="#L-5490"><span class="linenos">5490</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-5471"><a href="#L-5471"><span class="linenos">5471</span></a> <span class="k">def</span> <span class="nf">_parse_merge</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span>
+</span><span id="L-5472"><a href="#L-5472"><span class="linenos">5472</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">)</span>
+</span><span id="L-5473"><a href="#L-5473"><span class="linenos">5473</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="L-5474"><a href="#L-5474"><span class="linenos">5474</span></a>
+</span><span id="L-5475"><a href="#L-5475"><span class="linenos">5475</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-5476"><a href="#L-5476"><span class="linenos">5476</span></a> <span class="n">target</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="L-5477"><a href="#L-5477"><span class="linenos">5477</span></a>
+</span><span id="L-5478"><a href="#L-5478"><span class="linenos">5478</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span>
+</span><span id="L-5479"><a href="#L-5479"><span class="linenos">5479</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="L-5480"><a href="#L-5480"><span class="linenos">5480</span></a>
+</span><span id="L-5481"><a href="#L-5481"><span class="linenos">5481</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
+</span><span id="L-5482"><a href="#L-5482"><span class="linenos">5482</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="L-5483"><a href="#L-5483"><span class="linenos">5483</span></a>
+</span><span id="L-5484"><a href="#L-5484"><span class="linenos">5484</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5485"><a href="#L-5485"><span class="linenos">5485</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
+</span><span id="L-5486"><a href="#L-5486"><span class="linenos">5486</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
+</span><span id="L-5487"><a href="#L-5487"><span class="linenos">5487</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
+</span><span id="L-5488"><a href="#L-5488"><span class="linenos">5488</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
+</span><span id="L-5489"><a href="#L-5489"><span class="linenos">5489</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_when_matched</span><span class="p">(),</span>
+</span><span id="L-5490"><a href="#L-5490"><span class="linenos">5490</span></a> <span class="p">)</span>
</span><span id="L-5491"><a href="#L-5491"><span class="linenos">5491</span></a>
-</span><span id="L-5492"><a href="#L-5492"><span class="linenos">5492</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
-</span><span id="L-5493"><a href="#L-5493"><span class="linenos">5493</span></a>
-</span><span id="L-5494"><a href="#L-5494"><span class="linenos">5494</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</span><span class="p">):</span>
-</span><span id="L-5495"><a href="#L-5495"><span class="linenos">5495</span></a> <span class="n">_this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
-</span><span id="L-5496"><a href="#L-5496"><span class="linenos">5496</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
-</span><span id="L-5497"><a href="#L-5497"><span class="linenos">5497</span></a> <span class="n">then</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">_this</span><span class="p">)</span>
-</span><span id="L-5498"><a href="#L-5498"><span class="linenos">5498</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5499"><a href="#L-5499"><span class="linenos">5499</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5500"><a href="#L-5500"><span class="linenos">5500</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
-</span><span id="L-5501"><a href="#L-5501"><span class="linenos">5501</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
-</span><span id="L-5502"><a href="#L-5502"><span class="linenos">5502</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
-</span><span id="L-5503"><a href="#L-5503"><span class="linenos">5503</span></a> <span class="p">)</span>
-</span><span id="L-5504"><a href="#L-5504"><span class="linenos">5504</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">):</span>
-</span><span id="L-5505"><a href="#L-5505"><span class="linenos">5505</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
-</span><span id="L-5506"><a href="#L-5506"><span class="linenos">5506</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="L-5507"><a href="#L-5507"><span class="linenos">5507</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="L-5508"><a href="#L-5508"><span class="linenos">5508</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5509"><a href="#L-5509"><span class="linenos">5509</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5510"><a href="#L-5510"><span class="linenos">5510</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
-</span><span id="L-5511"><a href="#L-5511"><span class="linenos">5511</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">)</span>
-</span><span id="L-5512"><a href="#L-5512"><span class="linenos">5512</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">),</span>
-</span><span id="L-5513"><a href="#L-5513"><span class="linenos">5513</span></a> <span class="p">)</span>
-</span><span id="L-5514"><a href="#L-5514"><span class="linenos">5514</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">):</span>
-</span><span id="L-5515"><a href="#L-5515"><span class="linenos">5515</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-5516"><a href="#L-5516"><span class="linenos">5516</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5517"><a href="#L-5517"><span class="linenos">5517</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5518"><a href="#L-5518"><span class="linenos">5518</span></a>
-</span><span id="L-5519"><a href="#L-5519"><span class="linenos">5519</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-5520"><a href="#L-5520"><span class="linenos">5520</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5521"><a href="#L-5521"><span class="linenos">5521</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
-</span><span id="L-5522"><a href="#L-5522"><span class="linenos">5522</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
-</span><span id="L-5523"><a href="#L-5523"><span class="linenos">5523</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
-</span><span id="L-5524"><a href="#L-5524"><span class="linenos">5524</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
-</span><span id="L-5525"><a href="#L-5525"><span class="linenos">5525</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
-</span><span id="L-5526"><a href="#L-5526"><span class="linenos">5526</span></a> <span class="p">)</span>
-</span><span id="L-5527"><a href="#L-5527"><span class="linenos">5527</span></a> <span class="p">)</span>
-</span><span id="L-5528"><a href="#L-5528"><span class="linenos">5528</span></a> <span class="k">return</span> <span class="n">whens</span>
-</span><span id="L-5529"><a href="#L-5529"><span class="linenos">5529</span></a>
-</span><span id="L-5530"><a href="#L-5530"><span class="linenos">5530</span></a> <span class="k">def</span> <span class="nf">_parse_show</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5531"><a href="#L-5531"><span class="linenos">5531</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SHOW_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SHOW_TRIE</span><span class="p">)</span>
-</span><span id="L-5532"><a href="#L-5532"><span class="linenos">5532</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="L-5533"><a href="#L-5533"><span class="linenos">5533</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="L-5534"><a href="#L-5534"><span class="linenos">5534</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5535"><a href="#L-5535"><span class="linenos">5535</span></a>
-</span><span id="L-5536"><a href="#L-5536"><span class="linenos">5536</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
-</span><span id="L-5537"><a href="#L-5537"><span class="linenos">5537</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5538"><a href="#L-5538"><span class="linenos">5538</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5539"><a href="#L-5539"><span class="linenos">5539</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-5540"><a href="#L-5540"><span class="linenos">5540</span></a>
-</span><span id="L-5541"><a href="#L-5541"><span class="linenos">5541</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;GLOBAL&quot;</span><span class="p">,</span> <span class="s2">&quot;SESSION&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">):</span>
-</span><span id="L-5542"><a href="#L-5542"><span class="linenos">5542</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_transaction</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">)</span>
-</span><span id="L-5543"><a href="#L-5543"><span class="linenos">5543</span></a>
-</span><span id="L-5544"><a href="#L-5544"><span class="linenos">5544</span></a> <span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-5545"><a href="#L-5545"><span class="linenos">5545</span></a> <span class="n">assignment_delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;=&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">))</span>
-</span><span id="L-5546"><a href="#L-5546"><span class="linenos">5546</span></a>
-</span><span id="L-5547"><a href="#L-5547"><span class="linenos">5547</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">left</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_REQUIRES_ASSIGNMENT_DELIMITER</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">assignment_delimiter</span><span class="p">):</span>
-</span><span id="L-5548"><a href="#L-5548"><span class="linenos">5548</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-5549"><a href="#L-5549"><span class="linenos">5549</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5550"><a href="#L-5550"><span class="linenos">5550</span></a>
-</span><span id="L-5551"><a href="#L-5551"><span class="linenos">5551</span></a> <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-5552"><a href="#L-5552"><span class="linenos">5552</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">)</span>
+</span><span id="L-5492"><a href="#L-5492"><span class="linenos">5492</span></a> <span class="k">def</span> <span class="nf">_parse_when_matched</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">]:</span>
+</span><span id="L-5493"><a href="#L-5493"><span class="linenos">5493</span></a> <span class="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-5494"><a href="#L-5494"><span class="linenos">5494</span></a>
+</span><span id="L-5495"><a href="#L-5495"><span class="linenos">5495</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">):</span>
+</span><span id="L-5496"><a href="#L-5496"><span class="linenos">5496</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
+</span><span id="L-5497"><a href="#L-5497"><span class="linenos">5497</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCHED&quot;</span><span class="p">)</span>
+</span><span id="L-5498"><a href="#L-5498"><span class="linenos">5498</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-5499"><a href="#L-5499"><span class="linenos">5499</span></a> <span class="kc">False</span>
+</span><span id="L-5500"><a href="#L-5500"><span class="linenos">5500</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;TARGET&quot;</span><span class="p">)</span>
+</span><span id="L-5501"><a href="#L-5501"><span class="linenos">5501</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;SOURCE&quot;</span><span class="p">)</span>
+</span><span id="L-5502"><a href="#L-5502"><span class="linenos">5502</span></a> <span class="p">)</span>
+</span><span id="L-5503"><a href="#L-5503"><span class="linenos">5503</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-5504"><a href="#L-5504"><span class="linenos">5504</span></a>
+</span><span id="L-5505"><a href="#L-5505"><span class="linenos">5505</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
+</span><span id="L-5506"><a href="#L-5506"><span class="linenos">5506</span></a>
+</span><span id="L-5507"><a href="#L-5507"><span class="linenos">5507</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</span><span class="p">):</span>
+</span><span id="L-5508"><a href="#L-5508"><span class="linenos">5508</span></a> <span class="n">_this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="L-5509"><a href="#L-5509"><span class="linenos">5509</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
+</span><span id="L-5510"><a href="#L-5510"><span class="linenos">5510</span></a> <span class="n">then</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">_this</span><span class="p">)</span>
+</span><span id="L-5511"><a href="#L-5511"><span class="linenos">5511</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5512"><a href="#L-5512"><span class="linenos">5512</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5513"><a href="#L-5513"><span class="linenos">5513</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
+</span><span id="L-5514"><a href="#L-5514"><span class="linenos">5514</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
+</span><span id="L-5515"><a href="#L-5515"><span class="linenos">5515</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
+</span><span id="L-5516"><a href="#L-5516"><span class="linenos">5516</span></a> <span class="p">)</span>
+</span><span id="L-5517"><a href="#L-5517"><span class="linenos">5517</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">):</span>
+</span><span id="L-5518"><a href="#L-5518"><span class="linenos">5518</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="L-5519"><a href="#L-5519"><span class="linenos">5519</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="L-5520"><a href="#L-5520"><span class="linenos">5520</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="L-5521"><a href="#L-5521"><span class="linenos">5521</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5522"><a href="#L-5522"><span class="linenos">5522</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5523"><a href="#L-5523"><span class="linenos">5523</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
+</span><span id="L-5524"><a href="#L-5524"><span class="linenos">5524</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">)</span>
+</span><span id="L-5525"><a href="#L-5525"><span class="linenos">5525</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">),</span>
+</span><span id="L-5526"><a href="#L-5526"><span class="linenos">5526</span></a> <span class="p">)</span>
+</span><span id="L-5527"><a href="#L-5527"><span class="linenos">5527</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">):</span>
+</span><span id="L-5528"><a href="#L-5528"><span class="linenos">5528</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-5529"><a href="#L-5529"><span class="linenos">5529</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5530"><a href="#L-5530"><span class="linenos">5530</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5531"><a href="#L-5531"><span class="linenos">5531</span></a>
+</span><span id="L-5532"><a href="#L-5532"><span class="linenos">5532</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-5533"><a href="#L-5533"><span class="linenos">5533</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5534"><a href="#L-5534"><span class="linenos">5534</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
+</span><span id="L-5535"><a href="#L-5535"><span class="linenos">5535</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
+</span><span id="L-5536"><a href="#L-5536"><span class="linenos">5536</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
+</span><span id="L-5537"><a href="#L-5537"><span class="linenos">5537</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
+</span><span id="L-5538"><a href="#L-5538"><span class="linenos">5538</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
+</span><span id="L-5539"><a href="#L-5539"><span class="linenos">5539</span></a> <span class="p">)</span>
+</span><span id="L-5540"><a href="#L-5540"><span class="linenos">5540</span></a> <span class="p">)</span>
+</span><span id="L-5541"><a href="#L-5541"><span class="linenos">5541</span></a> <span class="k">return</span> <span class="n">whens</span>
+</span><span id="L-5542"><a href="#L-5542"><span class="linenos">5542</span></a>
+</span><span id="L-5543"><a href="#L-5543"><span class="linenos">5543</span></a> <span class="k">def</span> <span class="nf">_parse_show</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5544"><a href="#L-5544"><span class="linenos">5544</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SHOW_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SHOW_TRIE</span><span class="p">)</span>
+</span><span id="L-5545"><a href="#L-5545"><span class="linenos">5545</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="L-5546"><a href="#L-5546"><span class="linenos">5546</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="L-5547"><a href="#L-5547"><span class="linenos">5547</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5548"><a href="#L-5548"><span class="linenos">5548</span></a>
+</span><span id="L-5549"><a href="#L-5549"><span class="linenos">5549</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
+</span><span id="L-5550"><a href="#L-5550"><span class="linenos">5550</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="L-5551"><a href="#L-5551"><span class="linenos">5551</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5552"><a href="#L-5552"><span class="linenos">5552</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="L-5553"><a href="#L-5553"><span class="linenos">5553</span></a>
-</span><span id="L-5554"><a href="#L-5554"><span class="linenos">5554</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="L-5555"><a href="#L-5555"><span class="linenos">5555</span></a>
-</span><span id="L-5556"><a href="#L-5556"><span class="linenos">5556</span></a> <span class="k">def</span> <span class="nf">_parse_set_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-5557"><a href="#L-5557"><span class="linenos">5557</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)</span>
-</span><span id="L-5558"><a href="#L-5558"><span class="linenos">5558</span></a> <span class="n">characteristics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="L-5559"><a href="#L-5559"><span class="linenos">5559</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_CHARACTERISTICS</span><span class="p">)</span>
-</span><span id="L-5560"><a href="#L-5560"><span class="linenos">5560</span></a> <span class="p">)</span>
-</span><span id="L-5561"><a href="#L-5561"><span class="linenos">5561</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5562"><a href="#L-5562"><span class="linenos">5562</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
-</span><span id="L-5563"><a href="#L-5563"><span class="linenos">5563</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
-</span><span id="L-5564"><a href="#L-5564"><span class="linenos">5564</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span>
-</span><span id="L-5565"><a href="#L-5565"><span class="linenos">5565</span></a> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="n">global_</span><span class="p">},</span> <span class="c1"># type: ignore</span>
-</span><span id="L-5566"><a href="#L-5566"><span class="linenos">5566</span></a> <span class="p">)</span>
-</span><span id="L-5567"><a href="#L-5567"><span class="linenos">5567</span></a>
-</span><span id="L-5568"><a href="#L-5568"><span class="linenos">5568</span></a> <span class="k">def</span> <span class="nf">_parse_set_item</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5569"><a href="#L-5569"><span class="linenos">5569</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_TRIE</span><span class="p">)</span>
-</span><span id="L-5570"><a href="#L-5570"><span class="linenos">5570</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">if</span> <span class="n">parser</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="L-5571"><a href="#L-5571"><span class="linenos">5571</span></a>
-</span><span id="L-5572"><a href="#L-5572"><span class="linenos">5572</span></a> <span class="k">def</span> <span class="nf">_parse_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unset</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">tag</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="L-5573"><a href="#L-5573"><span class="linenos">5573</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-5574"><a href="#L-5574"><span class="linenos">5574</span></a> <span class="n">set_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5575"><a href="#L-5575"><span class="linenos">5575</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item</span><span class="p">),</span> <span class="n">unset</span><span class="o">=</span><span class="n">unset</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag</span>
-</span><span id="L-5576"><a href="#L-5576"><span class="linenos">5576</span></a> <span class="p">)</span>
-</span><span id="L-5577"><a href="#L-5577"><span class="linenos">5577</span></a>
-</span><span id="L-5578"><a href="#L-5578"><span class="linenos">5578</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-5579"><a href="#L-5579"><span class="linenos">5579</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-5580"><a href="#L-5580"><span class="linenos">5580</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5581"><a href="#L-5581"><span class="linenos">5581</span></a>
-</span><span id="L-5582"><a href="#L-5582"><span class="linenos">5582</span></a> <span class="k">return</span> <span class="n">set_</span>
-</span><span id="L-5583"><a href="#L-5583"><span class="linenos">5583</span></a>
-</span><span id="L-5584"><a href="#L-5584"><span class="linenos">5584</span></a> <span class="k">def</span> <span class="nf">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">]:</span>
-</span><span id="L-5585"><a href="#L-5585"><span class="linenos">5585</span></a> <span class="k">for</span> <span class="n">option</span> <span class="ow">in</span> <span class="n">options</span><span class="p">:</span>
-</span><span id="L-5586"><a href="#L-5586"><span class="linenos">5586</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="o">*</span><span class="n">option</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)):</span>
-</span><span id="L-5587"><a href="#L-5587"><span class="linenos">5587</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
-</span><span id="L-5588"><a href="#L-5588"><span class="linenos">5588</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5589"><a href="#L-5589"><span class="linenos">5589</span></a>
-</span><span id="L-5590"><a href="#L-5590"><span class="linenos">5590</span></a> <span class="k">def</span> <span class="nf">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="L-5591"><a href="#L-5591"><span class="linenos">5591</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-5592"><a href="#L-5592"><span class="linenos">5592</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5593"><a href="#L-5593"><span class="linenos">5593</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5594"><a href="#L-5594"><span class="linenos">5594</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-5595"><a href="#L-5595"><span class="linenos">5595</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_warn_unsupported</span><span class="p">()</span>
-</span><span id="L-5596"><a href="#L-5596"><span class="linenos">5596</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">text</span><span class="p">[:</span><span class="n">size</span><span class="p">],</span> <span class="n">expression</span><span class="o">=</span><span class="n">text</span><span class="p">[</span><span class="n">size</span><span class="p">:])</span>
-</span><span id="L-5597"><a href="#L-5597"><span class="linenos">5597</span></a>
-</span><span id="L-5598"><a href="#L-5598"><span class="linenos">5598</span></a> <span class="k">def</span> <span class="nf">_parse_dict_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span>
-</span><span id="L-5599"><a href="#L-5599"><span class="linenos">5599</span></a> <span class="n">settings</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-5600"><a href="#L-5600"><span class="linenos">5600</span></a>
-</span><span id="L-5601"><a href="#L-5601"><span class="linenos">5601</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="L-5602"><a href="#L-5602"><span class="linenos">5602</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-5603"><a href="#L-5603"><span class="linenos">5603</span></a>
-</span><span id="L-5604"><a href="#L-5604"><span class="linenos">5604</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="L-5605"><a href="#L-5605"><span class="linenos">5605</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-5606"><a href="#L-5606"><span class="linenos">5606</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="L-5607"><a href="#L-5607"><span class="linenos">5607</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-5608"><a href="#L-5608"><span class="linenos">5608</span></a>
-</span><span id="L-5609"><a href="#L-5609"><span class="linenos">5609</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-5610"><a href="#L-5610"><span class="linenos">5610</span></a> <span class="k">break</span>
-</span><span id="L-5611"><a href="#L-5611"><span class="linenos">5611</span></a> <span class="n">settings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">))</span>
-</span><span id="L-5612"><a href="#L-5612"><span class="linenos">5612</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span>
+</span><span id="L-5554"><a href="#L-5554"><span class="linenos">5554</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;GLOBAL&quot;</span><span class="p">,</span> <span class="s2">&quot;SESSION&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">):</span>
+</span><span id="L-5555"><a href="#L-5555"><span class="linenos">5555</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_transaction</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">)</span>
+</span><span id="L-5556"><a href="#L-5556"><span class="linenos">5556</span></a>
+</span><span id="L-5557"><a href="#L-5557"><span class="linenos">5557</span></a> <span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-5558"><a href="#L-5558"><span class="linenos">5558</span></a> <span class="n">assignment_delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;=&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">))</span>
+</span><span id="L-5559"><a href="#L-5559"><span class="linenos">5559</span></a>
+</span><span id="L-5560"><a href="#L-5560"><span class="linenos">5560</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">left</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_REQUIRES_ASSIGNMENT_DELIMITER</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">assignment_delimiter</span><span class="p">):</span>
+</span><span id="L-5561"><a href="#L-5561"><span class="linenos">5561</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-5562"><a href="#L-5562"><span class="linenos">5562</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5563"><a href="#L-5563"><span class="linenos">5563</span></a>
+</span><span id="L-5564"><a href="#L-5564"><span class="linenos">5564</span></a> <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-5565"><a href="#L-5565"><span class="linenos">5565</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">)</span>
+</span><span id="L-5566"><a href="#L-5566"><span class="linenos">5566</span></a>
+</span><span id="L-5567"><a href="#L-5567"><span class="linenos">5567</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="L-5568"><a href="#L-5568"><span class="linenos">5568</span></a>
+</span><span id="L-5569"><a href="#L-5569"><span class="linenos">5569</span></a> <span class="k">def</span> <span class="nf">_parse_set_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-5570"><a href="#L-5570"><span class="linenos">5570</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)</span>
+</span><span id="L-5571"><a href="#L-5571"><span class="linenos">5571</span></a> <span class="n">characteristics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="L-5572"><a href="#L-5572"><span class="linenos">5572</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_CHARACTERISTICS</span><span class="p">)</span>
+</span><span id="L-5573"><a href="#L-5573"><span class="linenos">5573</span></a> <span class="p">)</span>
+</span><span id="L-5574"><a href="#L-5574"><span class="linenos">5574</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5575"><a href="#L-5575"><span class="linenos">5575</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
+</span><span id="L-5576"><a href="#L-5576"><span class="linenos">5576</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
+</span><span id="L-5577"><a href="#L-5577"><span class="linenos">5577</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span>
+</span><span id="L-5578"><a href="#L-5578"><span class="linenos">5578</span></a> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="n">global_</span><span class="p">},</span> <span class="c1"># type: ignore</span>
+</span><span id="L-5579"><a href="#L-5579"><span class="linenos">5579</span></a> <span class="p">)</span>
+</span><span id="L-5580"><a href="#L-5580"><span class="linenos">5580</span></a>
+</span><span id="L-5581"><a href="#L-5581"><span class="linenos">5581</span></a> <span class="k">def</span> <span class="nf">_parse_set_item</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5582"><a href="#L-5582"><span class="linenos">5582</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_TRIE</span><span class="p">)</span>
+</span><span id="L-5583"><a href="#L-5583"><span class="linenos">5583</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">if</span> <span class="n">parser</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="L-5584"><a href="#L-5584"><span class="linenos">5584</span></a>
+</span><span id="L-5585"><a href="#L-5585"><span class="linenos">5585</span></a> <span class="k">def</span> <span class="nf">_parse_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unset</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">tag</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="L-5586"><a href="#L-5586"><span class="linenos">5586</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-5587"><a href="#L-5587"><span class="linenos">5587</span></a> <span class="n">set_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5588"><a href="#L-5588"><span class="linenos">5588</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item</span><span class="p">),</span> <span class="n">unset</span><span class="o">=</span><span class="n">unset</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag</span>
+</span><span id="L-5589"><a href="#L-5589"><span class="linenos">5589</span></a> <span class="p">)</span>
+</span><span id="L-5590"><a href="#L-5590"><span class="linenos">5590</span></a>
+</span><span id="L-5591"><a href="#L-5591"><span class="linenos">5591</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-5592"><a href="#L-5592"><span class="linenos">5592</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-5593"><a href="#L-5593"><span class="linenos">5593</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5594"><a href="#L-5594"><span class="linenos">5594</span></a>
+</span><span id="L-5595"><a href="#L-5595"><span class="linenos">5595</span></a> <span class="k">return</span> <span class="n">set_</span>
+</span><span id="L-5596"><a href="#L-5596"><span class="linenos">5596</span></a>
+</span><span id="L-5597"><a href="#L-5597"><span class="linenos">5597</span></a> <span class="k">def</span> <span class="nf">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">]:</span>
+</span><span id="L-5598"><a href="#L-5598"><span class="linenos">5598</span></a> <span class="k">for</span> <span class="n">option</span> <span class="ow">in</span> <span class="n">options</span><span class="p">:</span>
+</span><span id="L-5599"><a href="#L-5599"><span class="linenos">5599</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="o">*</span><span class="n">option</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)):</span>
+</span><span id="L-5600"><a href="#L-5600"><span class="linenos">5600</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
+</span><span id="L-5601"><a href="#L-5601"><span class="linenos">5601</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5602"><a href="#L-5602"><span class="linenos">5602</span></a>
+</span><span id="L-5603"><a href="#L-5603"><span class="linenos">5603</span></a> <span class="k">def</span> <span class="nf">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="L-5604"><a href="#L-5604"><span class="linenos">5604</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-5605"><a href="#L-5605"><span class="linenos">5605</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5606"><a href="#L-5606"><span class="linenos">5606</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5607"><a href="#L-5607"><span class="linenos">5607</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-5608"><a href="#L-5608"><span class="linenos">5608</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_warn_unsupported</span><span class="p">()</span>
+</span><span id="L-5609"><a href="#L-5609"><span class="linenos">5609</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">text</span><span class="p">[:</span><span class="n">size</span><span class="p">],</span> <span class="n">expression</span><span class="o">=</span><span class="n">text</span><span class="p">[</span><span class="n">size</span><span class="p">:])</span>
+</span><span id="L-5610"><a href="#L-5610"><span class="linenos">5610</span></a>
+</span><span id="L-5611"><a href="#L-5611"><span class="linenos">5611</span></a> <span class="k">def</span> <span class="nf">_parse_dict_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span>
+</span><span id="L-5612"><a href="#L-5612"><span class="linenos">5612</span></a> <span class="n">settings</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-5613"><a href="#L-5613"><span class="linenos">5613</span></a>
-</span><span id="L-5614"><a href="#L-5614"><span class="linenos">5614</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-5615"><a href="#L-5615"><span class="linenos">5615</span></a>
-</span><span id="L-5616"><a href="#L-5616"><span class="linenos">5616</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5617"><a href="#L-5617"><span class="linenos">5617</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">,</span>
-</span><span id="L-5618"><a href="#L-5618"><span class="linenos">5618</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-5619"><a href="#L-5619"><span class="linenos">5619</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-5620"><a href="#L-5620"><span class="linenos">5620</span></a> <span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span>
-</span><span id="L-5621"><a href="#L-5621"><span class="linenos">5621</span></a> <span class="p">)</span>
-</span><span id="L-5622"><a href="#L-5622"><span class="linenos">5622</span></a>
-</span><span id="L-5623"><a href="#L-5623"><span class="linenos">5623</span></a> <span class="k">def</span> <span class="nf">_parse_dict_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span>
-</span><span id="L-5624"><a href="#L-5624"><span class="linenos">5624</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="L-5625"><a href="#L-5625"><span class="linenos">5625</span></a> <span class="n">has_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)</span>
-</span><span id="L-5626"><a href="#L-5626"><span class="linenos">5626</span></a> <span class="k">if</span> <span class="n">has_min</span><span class="p">:</span>
-</span><span id="L-5627"><a href="#L-5627"><span class="linenos">5627</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-5628"><a href="#L-5628"><span class="linenos">5628</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
-</span><span id="L-5629"><a href="#L-5629"><span class="linenos">5629</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-5630"><a href="#L-5630"><span class="linenos">5630</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5631"><a href="#L-5631"><span class="linenos">5631</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="L-5632"><a href="#L-5632"><span class="linenos">5632</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
-</span><span id="L-5633"><a href="#L-5633"><span class="linenos">5633</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="L-5634"><a href="#L-5634"><span class="linenos">5634</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span><span class="p">)</span>
+</span><span id="L-5614"><a href="#L-5614"><span class="linenos">5614</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="L-5615"><a href="#L-5615"><span class="linenos">5615</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-5616"><a href="#L-5616"><span class="linenos">5616</span></a>
+</span><span id="L-5617"><a href="#L-5617"><span class="linenos">5617</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="L-5618"><a href="#L-5618"><span class="linenos">5618</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-5619"><a href="#L-5619"><span class="linenos">5619</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="L-5620"><a href="#L-5620"><span class="linenos">5620</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-5621"><a href="#L-5621"><span class="linenos">5621</span></a>
+</span><span id="L-5622"><a href="#L-5622"><span class="linenos">5622</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-5623"><a href="#L-5623"><span class="linenos">5623</span></a> <span class="k">break</span>
+</span><span id="L-5624"><a href="#L-5624"><span class="linenos">5624</span></a> <span class="n">settings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">))</span>
+</span><span id="L-5625"><a href="#L-5625"><span class="linenos">5625</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span>
+</span><span id="L-5626"><a href="#L-5626"><span class="linenos">5626</span></a>
+</span><span id="L-5627"><a href="#L-5627"><span class="linenos">5627</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-5628"><a href="#L-5628"><span class="linenos">5628</span></a>
+</span><span id="L-5629"><a href="#L-5629"><span class="linenos">5629</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5630"><a href="#L-5630"><span class="linenos">5630</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">,</span>
+</span><span id="L-5631"><a href="#L-5631"><span class="linenos">5631</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-5632"><a href="#L-5632"><span class="linenos">5632</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-5633"><a href="#L-5633"><span class="linenos">5633</span></a> <span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span>
+</span><span id="L-5634"><a href="#L-5634"><span class="linenos">5634</span></a> <span class="p">)</span>
</span><span id="L-5635"><a href="#L-5635"><span class="linenos">5635</span></a>
-</span><span id="L-5636"><a href="#L-5636"><span class="linenos">5636</span></a> <span class="k">def</span> <span class="nf">_parse_comprehension</span><span class="p">(</span>
-</span><span id="L-5637"><a href="#L-5637"><span class="linenos">5637</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="L-5638"><a href="#L-5638"><span class="linenos">5638</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">]:</span>
-</span><span id="L-5639"><a href="#L-5639"><span class="linenos">5639</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-5640"><a href="#L-5640"><span class="linenos">5640</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-5641"><a href="#L-5641"><span class="linenos">5641</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
-</span><span id="L-5642"><a href="#L-5642"><span class="linenos">5642</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-5643"><a href="#L-5643"><span class="linenos">5643</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5644"><a href="#L-5644"><span class="linenos">5644</span></a> <span class="n">iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="L-5645"><a href="#L-5645"><span class="linenos">5645</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="L-5646"><a href="#L-5646"><span class="linenos">5646</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="L-5647"><a href="#L-5647"><span class="linenos">5647</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">,</span>
-</span><span id="L-5648"><a href="#L-5648"><span class="linenos">5648</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="L-5649"><a href="#L-5649"><span class="linenos">5649</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="L-5650"><a href="#L-5650"><span class="linenos">5650</span></a> <span class="n">iterator</span><span class="o">=</span><span class="n">iterator</span><span class="p">,</span>
-</span><span id="L-5651"><a href="#L-5651"><span class="linenos">5651</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
-</span><span id="L-5652"><a href="#L-5652"><span class="linenos">5652</span></a> <span class="p">)</span>
-</span><span id="L-5653"><a href="#L-5653"><span class="linenos">5653</span></a>
-</span><span id="L-5654"><a href="#L-5654"><span class="linenos">5654</span></a> <span class="k">def</span> <span class="nf">_parse_heredoc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">]:</span>
-</span><span id="L-5655"><a href="#L-5655"><span class="linenos">5655</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">):</span>
-</span><span id="L-5656"><a href="#L-5656"><span class="linenos">5656</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="L-5657"><a href="#L-5657"><span class="linenos">5657</span></a>
-</span><span id="L-5658"><a href="#L-5658"><span class="linenos">5658</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">):</span>
-</span><span id="L-5659"><a href="#L-5659"><span class="linenos">5659</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5660"><a href="#L-5660"><span class="linenos">5660</span></a>
-</span><span id="L-5661"><a href="#L-5661"><span class="linenos">5661</span></a> <span class="n">tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
-</span><span id="L-5662"><a href="#L-5662"><span class="linenos">5662</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="L-5663"><a href="#L-5663"><span class="linenos">5663</span></a>
-</span><span id="L-5664"><a href="#L-5664"><span class="linenos">5664</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">():</span>
-</span><span id="L-5665"><a href="#L-5665"><span class="linenos">5665</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5666"><a href="#L-5666"><span class="linenos">5666</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="L-5667"><a href="#L-5667"><span class="linenos">5667</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5668"><a href="#L-5668"><span class="linenos">5668</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;No closing $ found&quot;</span><span class="p">)</span>
-</span><span id="L-5669"><a href="#L-5669"><span class="linenos">5669</span></a>
-</span><span id="L-5670"><a href="#L-5670"><span class="linenos">5670</span></a> <span class="k">if</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;$&quot;</span><span class="p">:</span>
-</span><span id="L-5671"><a href="#L-5671"><span class="linenos">5671</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">):</span>
-</span><span id="L-5672"><a href="#L-5672"><span class="linenos">5672</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
-</span><span id="L-5673"><a href="#L-5673"><span class="linenos">5673</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">)</span>
-</span><span id="L-5674"><a href="#L-5674"><span class="linenos">5674</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5675"><a href="#L-5675"><span class="linenos">5675</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;No closing $ found&quot;</span><span class="p">)</span>
+</span><span id="L-5636"><a href="#L-5636"><span class="linenos">5636</span></a> <span class="k">def</span> <span class="nf">_parse_dict_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span>
+</span><span id="L-5637"><a href="#L-5637"><span class="linenos">5637</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="L-5638"><a href="#L-5638"><span class="linenos">5638</span></a> <span class="n">has_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)</span>
+</span><span id="L-5639"><a href="#L-5639"><span class="linenos">5639</span></a> <span class="k">if</span> <span class="n">has_min</span><span class="p">:</span>
+</span><span id="L-5640"><a href="#L-5640"><span class="linenos">5640</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-5641"><a href="#L-5641"><span class="linenos">5641</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
+</span><span id="L-5642"><a href="#L-5642"><span class="linenos">5642</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-5643"><a href="#L-5643"><span class="linenos">5643</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5644"><a href="#L-5644"><span class="linenos">5644</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="L-5645"><a href="#L-5645"><span class="linenos">5645</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+</span><span id="L-5646"><a href="#L-5646"><span class="linenos">5646</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="L-5647"><a href="#L-5647"><span class="linenos">5647</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span><span class="p">)</span>
+</span><span id="L-5648"><a href="#L-5648"><span class="linenos">5648</span></a>
+</span><span id="L-5649"><a href="#L-5649"><span class="linenos">5649</span></a> <span class="k">def</span> <span class="nf">_parse_comprehension</span><span class="p">(</span>
+</span><span id="L-5650"><a href="#L-5650"><span class="linenos">5650</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="L-5651"><a href="#L-5651"><span class="linenos">5651</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">]:</span>
+</span><span id="L-5652"><a href="#L-5652"><span class="linenos">5652</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-5653"><a href="#L-5653"><span class="linenos">5653</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-5654"><a href="#L-5654"><span class="linenos">5654</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
+</span><span id="L-5655"><a href="#L-5655"><span class="linenos">5655</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-5656"><a href="#L-5656"><span class="linenos">5656</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5657"><a href="#L-5657"><span class="linenos">5657</span></a> <span class="n">iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="L-5658"><a href="#L-5658"><span class="linenos">5658</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="L-5659"><a href="#L-5659"><span class="linenos">5659</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="L-5660"><a href="#L-5660"><span class="linenos">5660</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">,</span>
+</span><span id="L-5661"><a href="#L-5661"><span class="linenos">5661</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="L-5662"><a href="#L-5662"><span class="linenos">5662</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="L-5663"><a href="#L-5663"><span class="linenos">5663</span></a> <span class="n">iterator</span><span class="o">=</span><span class="n">iterator</span><span class="p">,</span>
+</span><span id="L-5664"><a href="#L-5664"><span class="linenos">5664</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
+</span><span id="L-5665"><a href="#L-5665"><span class="linenos">5665</span></a> <span class="p">)</span>
+</span><span id="L-5666"><a href="#L-5666"><span class="linenos">5666</span></a>
+</span><span id="L-5667"><a href="#L-5667"><span class="linenos">5667</span></a> <span class="k">def</span> <span class="nf">_parse_heredoc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">]:</span>
+</span><span id="L-5668"><a href="#L-5668"><span class="linenos">5668</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">):</span>
+</span><span id="L-5669"><a href="#L-5669"><span class="linenos">5669</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="L-5670"><a href="#L-5670"><span class="linenos">5670</span></a>
+</span><span id="L-5671"><a href="#L-5671"><span class="linenos">5671</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">):</span>
+</span><span id="L-5672"><a href="#L-5672"><span class="linenos">5672</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5673"><a href="#L-5673"><span class="linenos">5673</span></a>
+</span><span id="L-5674"><a href="#L-5674"><span class="linenos">5674</span></a> <span class="n">tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
+</span><span id="L-5675"><a href="#L-5675"><span class="linenos">5675</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="L-5676"><a href="#L-5676"><span class="linenos">5676</span></a>
-</span><span id="L-5677"><a href="#L-5677"><span class="linenos">5677</span></a> <span class="n">heredoc_start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
-</span><span id="L-5678"><a href="#L-5678"><span class="linenos">5678</span></a>
-</span><span id="L-5679"><a href="#L-5679"><span class="linenos">5679</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-5680"><a href="#L-5680"><span class="linenos">5680</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-5681"><a href="#L-5681"><span class="linenos">5681</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">heredoc_start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="L-5682"><a href="#L-5682"><span class="linenos">5682</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">tags</span><span class="p">))</span>
-</span><span id="L-5683"><a href="#L-5683"><span class="linenos">5683</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag_text</span><span class="p">)</span>
-</span><span id="L-5684"><a href="#L-5684"><span class="linenos">5684</span></a>
-</span><span id="L-5685"><a href="#L-5685"><span class="linenos">5685</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5686"><a href="#L-5686"><span class="linenos">5686</span></a>
-</span><span id="L-5687"><a href="#L-5687"><span class="linenos">5687</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No closing </span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span><span class="si">}</span><span class="s2"> found&quot;</span><span class="p">)</span>
-</span><span id="L-5688"><a href="#L-5688"><span class="linenos">5688</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5677"><a href="#L-5677"><span class="linenos">5677</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">():</span>
+</span><span id="L-5678"><a href="#L-5678"><span class="linenos">5678</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5679"><a href="#L-5679"><span class="linenos">5679</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="L-5680"><a href="#L-5680"><span class="linenos">5680</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5681"><a href="#L-5681"><span class="linenos">5681</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;No closing $ found&quot;</span><span class="p">)</span>
+</span><span id="L-5682"><a href="#L-5682"><span class="linenos">5682</span></a>
+</span><span id="L-5683"><a href="#L-5683"><span class="linenos">5683</span></a> <span class="k">if</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;$&quot;</span><span class="p">:</span>
+</span><span id="L-5684"><a href="#L-5684"><span class="linenos">5684</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">):</span>
+</span><span id="L-5685"><a href="#L-5685"><span class="linenos">5685</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
+</span><span id="L-5686"><a href="#L-5686"><span class="linenos">5686</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">)</span>
+</span><span id="L-5687"><a href="#L-5687"><span class="linenos">5687</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5688"><a href="#L-5688"><span class="linenos">5688</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;No closing $ found&quot;</span><span class="p">)</span>
</span><span id="L-5689"><a href="#L-5689"><span class="linenos">5689</span></a>
-</span><span id="L-5690"><a href="#L-5690"><span class="linenos">5690</span></a> <span class="k">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
-</span><span id="L-5691"><a href="#L-5691"><span class="linenos">5691</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parsers</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">],</span> <span class="n">trie</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
-</span><span id="L-5692"><a href="#L-5692"><span class="linenos">5692</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]:</span>
-</span><span id="L-5693"><a href="#L-5693"><span class="linenos">5693</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-5694"><a href="#L-5694"><span class="linenos">5694</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5695"><a href="#L-5695"><span class="linenos">5695</span></a>
-</span><span id="L-5696"><a href="#L-5696"><span class="linenos">5696</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-5697"><a href="#L-5697"><span class="linenos">5697</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-5698"><a href="#L-5698"><span class="linenos">5698</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="L-5699"><a href="#L-5699"><span class="linenos">5699</span></a> <span class="c1"># The current token might be multiple words</span>
-</span><span id="L-5700"><a href="#L-5700"><span class="linenos">5700</span></a> <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="L-5701"><a href="#L-5701"><span class="linenos">5701</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="L-5702"><a href="#L-5702"><span class="linenos">5702</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">curr</span><span class="p">)</span>
-</span><span id="L-5703"><a href="#L-5703"><span class="linenos">5703</span></a>
-</span><span id="L-5704"><a href="#L-5704"><span class="linenos">5704</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5705"><a href="#L-5705"><span class="linenos">5705</span></a> <span class="n">result</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
-</span><span id="L-5706"><a href="#L-5706"><span class="linenos">5706</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
-</span><span id="L-5707"><a href="#L-5707"><span class="linenos">5707</span></a> <span class="k">break</span>
+</span><span id="L-5690"><a href="#L-5690"><span class="linenos">5690</span></a> <span class="n">heredoc_start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
+</span><span id="L-5691"><a href="#L-5691"><span class="linenos">5691</span></a>
+</span><span id="L-5692"><a href="#L-5692"><span class="linenos">5692</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-5693"><a href="#L-5693"><span class="linenos">5693</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-5694"><a href="#L-5694"><span class="linenos">5694</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">heredoc_start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="L-5695"><a href="#L-5695"><span class="linenos">5695</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">tags</span><span class="p">))</span>
+</span><span id="L-5696"><a href="#L-5696"><span class="linenos">5696</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag_text</span><span class="p">)</span>
+</span><span id="L-5697"><a href="#L-5697"><span class="linenos">5697</span></a>
+</span><span id="L-5698"><a href="#L-5698"><span class="linenos">5698</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5699"><a href="#L-5699"><span class="linenos">5699</span></a>
+</span><span id="L-5700"><a href="#L-5700"><span class="linenos">5700</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No closing </span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span><span class="si">}</span><span class="s2"> found&quot;</span><span class="p">)</span>
+</span><span id="L-5701"><a href="#L-5701"><span class="linenos">5701</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5702"><a href="#L-5702"><span class="linenos">5702</span></a>
+</span><span id="L-5703"><a href="#L-5703"><span class="linenos">5703</span></a> <span class="k">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
+</span><span id="L-5704"><a href="#L-5704"><span class="linenos">5704</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parsers</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">],</span> <span class="n">trie</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
+</span><span id="L-5705"><a href="#L-5705"><span class="linenos">5705</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]:</span>
+</span><span id="L-5706"><a href="#L-5706"><span class="linenos">5706</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-5707"><a href="#L-5707"><span class="linenos">5707</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="L-5708"><a href="#L-5708"><span class="linenos">5708</span></a>
-</span><span id="L-5709"><a href="#L-5709"><span class="linenos">5709</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
-</span><span id="L-5710"><a href="#L-5710"><span class="linenos">5710</span></a> <span class="n">subparser</span> <span class="o">=</span> <span class="n">parsers</span><span class="p">[</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">this</span><span class="p">)]</span>
-</span><span id="L-5711"><a href="#L-5711"><span class="linenos">5711</span></a> <span class="k">return</span> <span class="n">subparser</span>
-</span><span id="L-5712"><a href="#L-5712"><span class="linenos">5712</span></a>
-</span><span id="L-5713"><a href="#L-5713"><span class="linenos">5713</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-5714"><a href="#L-5714"><span class="linenos">5714</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5715"><a href="#L-5715"><span class="linenos">5715</span></a>
-</span><span id="L-5716"><a href="#L-5716"><span class="linenos">5716</span></a> <span class="k">def</span> <span class="nf">_match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="L-5717"><a href="#L-5717"><span class="linenos">5717</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-5718"><a href="#L-5718"><span class="linenos">5718</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5719"><a href="#L-5719"><span class="linenos">5719</span></a>
-</span><span id="L-5720"><a href="#L-5720"><span class="linenos">5720</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type</span><span class="p">:</span>
-</span><span id="L-5721"><a href="#L-5721"><span class="linenos">5721</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-5722"><a href="#L-5722"><span class="linenos">5722</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5723"><a href="#L-5723"><span class="linenos">5723</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="L-5724"><a href="#L-5724"><span class="linenos">5724</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-5709"><a href="#L-5709"><span class="linenos">5709</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-5710"><a href="#L-5710"><span class="linenos">5710</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-5711"><a href="#L-5711"><span class="linenos">5711</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="L-5712"><a href="#L-5712"><span class="linenos">5712</span></a> <span class="c1"># The current token might be multiple words</span>
+</span><span id="L-5713"><a href="#L-5713"><span class="linenos">5713</span></a> <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="L-5714"><a href="#L-5714"><span class="linenos">5714</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="L-5715"><a href="#L-5715"><span class="linenos">5715</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">curr</span><span class="p">)</span>
+</span><span id="L-5716"><a href="#L-5716"><span class="linenos">5716</span></a>
+</span><span id="L-5717"><a href="#L-5717"><span class="linenos">5717</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5718"><a href="#L-5718"><span class="linenos">5718</span></a> <span class="n">result</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
+</span><span id="L-5719"><a href="#L-5719"><span class="linenos">5719</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+</span><span id="L-5720"><a href="#L-5720"><span class="linenos">5720</span></a> <span class="k">break</span>
+</span><span id="L-5721"><a href="#L-5721"><span class="linenos">5721</span></a>
+</span><span id="L-5722"><a href="#L-5722"><span class="linenos">5722</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
+</span><span id="L-5723"><a href="#L-5723"><span class="linenos">5723</span></a> <span class="n">subparser</span> <span class="o">=</span> <span class="n">parsers</span><span class="p">[</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">this</span><span class="p">)]</span>
+</span><span id="L-5724"><a href="#L-5724"><span class="linenos">5724</span></a> <span class="k">return</span> <span class="n">subparser</span>
</span><span id="L-5725"><a href="#L-5725"><span class="linenos">5725</span></a>
-</span><span id="L-5726"><a href="#L-5726"><span class="linenos">5726</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5727"><a href="#L-5727"><span class="linenos">5727</span></a>
-</span><span id="L-5728"><a href="#L-5728"><span class="linenos">5728</span></a> <span class="k">def</span> <span class="nf">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">types</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-5729"><a href="#L-5729"><span class="linenos">5729</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="L-5730"><a href="#L-5730"><span class="linenos">5730</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5731"><a href="#L-5731"><span class="linenos">5731</span></a>
-</span><span id="L-5732"><a href="#L-5732"><span class="linenos">5732</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="n">types</span><span class="p">:</span>
-</span><span id="L-5733"><a href="#L-5733"><span class="linenos">5733</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-5734"><a href="#L-5734"><span class="linenos">5734</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5735"><a href="#L-5735"><span class="linenos">5735</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-5736"><a href="#L-5736"><span class="linenos">5736</span></a>
-</span><span id="L-5737"><a href="#L-5737"><span class="linenos">5737</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5726"><a href="#L-5726"><span class="linenos">5726</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-5727"><a href="#L-5727"><span class="linenos">5727</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5728"><a href="#L-5728"><span class="linenos">5728</span></a>
+</span><span id="L-5729"><a href="#L-5729"><span class="linenos">5729</span></a> <span class="k">def</span> <span class="nf">_match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="L-5730"><a href="#L-5730"><span class="linenos">5730</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-5731"><a href="#L-5731"><span class="linenos">5731</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5732"><a href="#L-5732"><span class="linenos">5732</span></a>
+</span><span id="L-5733"><a href="#L-5733"><span class="linenos">5733</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type</span><span class="p">:</span>
+</span><span id="L-5734"><a href="#L-5734"><span class="linenos">5734</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-5735"><a href="#L-5735"><span class="linenos">5735</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5736"><a href="#L-5736"><span class="linenos">5736</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="L-5737"><a href="#L-5737"><span class="linenos">5737</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-5738"><a href="#L-5738"><span class="linenos">5738</span></a>
-</span><span id="L-5739"><a href="#L-5739"><span class="linenos">5739</span></a> <span class="k">def</span> <span class="nf">_match_pair</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type_a</span><span class="p">,</span> <span class="n">token_type_b</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-5740"><a href="#L-5740"><span class="linenos">5740</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
-</span><span id="L-5741"><a href="#L-5741"><span class="linenos">5741</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5742"><a href="#L-5742"><span class="linenos">5742</span></a>
-</span><span id="L-5743"><a href="#L-5743"><span class="linenos">5743</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_a</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_b</span><span class="p">:</span>
-</span><span id="L-5744"><a href="#L-5744"><span class="linenos">5744</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-5745"><a href="#L-5745"><span class="linenos">5745</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="L-5746"><a href="#L-5746"><span class="linenos">5746</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-5747"><a href="#L-5747"><span class="linenos">5747</span></a>
-</span><span id="L-5748"><a href="#L-5748"><span class="linenos">5748</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5739"><a href="#L-5739"><span class="linenos">5739</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5740"><a href="#L-5740"><span class="linenos">5740</span></a>
+</span><span id="L-5741"><a href="#L-5741"><span class="linenos">5741</span></a> <span class="k">def</span> <span class="nf">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">types</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-5742"><a href="#L-5742"><span class="linenos">5742</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="L-5743"><a href="#L-5743"><span class="linenos">5743</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5744"><a href="#L-5744"><span class="linenos">5744</span></a>
+</span><span id="L-5745"><a href="#L-5745"><span class="linenos">5745</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="n">types</span><span class="p">:</span>
+</span><span id="L-5746"><a href="#L-5746"><span class="linenos">5746</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-5747"><a href="#L-5747"><span class="linenos">5747</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5748"><a href="#L-5748"><span class="linenos">5748</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="L-5749"><a href="#L-5749"><span class="linenos">5749</span></a>
-</span><span id="L-5750"><a href="#L-5750"><span class="linenos">5750</span></a> <span class="k">def</span> <span class="nf">_match_l_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-5751"><a href="#L-5751"><span class="linenos">5751</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="L-5752"><a href="#L-5752"><span class="linenos">5752</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting (&quot;</span><span class="p">)</span>
-</span><span id="L-5753"><a href="#L-5753"><span class="linenos">5753</span></a>
-</span><span id="L-5754"><a href="#L-5754"><span class="linenos">5754</span></a> <span class="k">def</span> <span class="nf">_match_r_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-5755"><a href="#L-5755"><span class="linenos">5755</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="L-5756"><a href="#L-5756"><span class="linenos">5756</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">)</span>
-</span><span id="L-5757"><a href="#L-5757"><span class="linenos">5757</span></a>
-</span><span id="L-5758"><a href="#L-5758"><span class="linenos">5758</span></a> <span class="k">def</span> <span class="nf">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-5759"><a href="#L-5759"><span class="linenos">5759</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
-</span><span id="L-5760"><a href="#L-5760"><span class="linenos">5760</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-5761"><a href="#L-5761"><span class="linenos">5761</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5762"><a href="#L-5762"><span class="linenos">5762</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-5763"><a href="#L-5763"><span class="linenos">5763</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5764"><a href="#L-5764"><span class="linenos">5764</span></a>
-</span><span id="L-5765"><a href="#L-5765"><span class="linenos">5765</span></a> <span class="k">def</span> <span class="nf">_match_text_seq</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="L-5766"><a href="#L-5766"><span class="linenos">5766</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="L-5767"><a href="#L-5767"><span class="linenos">5767</span></a> <span class="k">for</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
-</span><span id="L-5768"><a href="#L-5768"><span class="linenos">5768</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="n">text</span><span class="p">:</span>
-</span><span id="L-5769"><a href="#L-5769"><span class="linenos">5769</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="L-5770"><a href="#L-5770"><span class="linenos">5770</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5771"><a href="#L-5771"><span class="linenos">5771</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-5772"><a href="#L-5772"><span class="linenos">5772</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="L-5773"><a href="#L-5773"><span class="linenos">5773</span></a>
-</span><span id="L-5774"><a href="#L-5774"><span class="linenos">5774</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="L-5775"><a href="#L-5775"><span class="linenos">5775</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-5776"><a href="#L-5776"><span class="linenos">5776</span></a>
-</span><span id="L-5777"><a href="#L-5777"><span class="linenos">5777</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="L-5778"><a href="#L-5778"><span class="linenos">5778</span></a>
-</span><span id="L-5779"><a href="#L-5779"><span class="linenos">5779</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-5780"><a href="#L-5780"><span class="linenos">5780</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="L-5781"><a href="#L-5781"><span class="linenos">5781</span></a> <span class="o">...</span>
-</span><span id="L-5782"><a href="#L-5782"><span class="linenos">5782</span></a>
-</span><span id="L-5783"><a href="#L-5783"><span class="linenos">5783</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="L-5784"><a href="#L-5784"><span class="linenos">5784</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span>
-</span><span id="L-5785"><a href="#L-5785"><span class="linenos">5785</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="L-5786"><a href="#L-5786"><span class="linenos">5786</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5787"><a href="#L-5787"><span class="linenos">5787</span></a> <span class="o">...</span>
-</span><span id="L-5788"><a href="#L-5788"><span class="linenos">5788</span></a>
-</span><span id="L-5789"><a href="#L-5789"><span class="linenos">5789</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">):</span>
-</span><span id="L-5790"><a href="#L-5790"><span class="linenos">5790</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
-</span><span id="L-5791"><a href="#L-5791"><span class="linenos">5791</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
-</span><span id="L-5792"><a href="#L-5792"><span class="linenos">5792</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
-</span><span id="L-5793"><a href="#L-5793"><span class="linenos">5793</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
-</span><span id="L-5794"><a href="#L-5794"><span class="linenos">5794</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
-</span><span id="L-5795"><a href="#L-5795"><span class="linenos">5795</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-5796"><a href="#L-5796"><span class="linenos">5796</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-5797"><a href="#L-5797"><span class="linenos">5797</span></a> <span class="p">)</span>
-</span><span id="L-5798"><a href="#L-5798"><span class="linenos">5798</span></a>
-</span><span id="L-5799"><a href="#L-5799"><span class="linenos">5799</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="L-5800"><a href="#L-5800"><span class="linenos">5800</span></a>
-</span><span id="L-5801"><a href="#L-5801"><span class="linenos">5801</span></a> <span class="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span>
-</span><span id="L-5802"><a href="#L-5802"><span class="linenos">5802</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">lambda_variables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
-</span><span id="L-5803"><a href="#L-5803"><span class="linenos">5803</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="L-5804"><a href="#L-5804"><span class="linenos">5804</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
-</span><span id="L-5805"><a href="#L-5805"><span class="linenos">5805</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="L-5806"><a href="#L-5806"><span class="linenos">5806</span></a>
-</span><span id="L-5807"><a href="#L-5807"><span class="linenos">5807</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
-</span><span id="L-5808"><a href="#L-5808"><span class="linenos">5808</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">lambda_variables</span><span class="p">:</span>
-</span><span id="L-5809"><a href="#L-5809"><span class="linenos">5809</span></a> <span class="n">dot_or_id</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">to_dot</span><span class="p">()</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span>
-</span><span id="L-5810"><a href="#L-5810"><span class="linenos">5810</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="L-5750"><a href="#L-5750"><span class="linenos">5750</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5751"><a href="#L-5751"><span class="linenos">5751</span></a>
+</span><span id="L-5752"><a href="#L-5752"><span class="linenos">5752</span></a> <span class="k">def</span> <span class="nf">_match_pair</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type_a</span><span class="p">,</span> <span class="n">token_type_b</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-5753"><a href="#L-5753"><span class="linenos">5753</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
+</span><span id="L-5754"><a href="#L-5754"><span class="linenos">5754</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5755"><a href="#L-5755"><span class="linenos">5755</span></a>
+</span><span id="L-5756"><a href="#L-5756"><span class="linenos">5756</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_a</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_b</span><span class="p">:</span>
+</span><span id="L-5757"><a href="#L-5757"><span class="linenos">5757</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-5758"><a href="#L-5758"><span class="linenos">5758</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="L-5759"><a href="#L-5759"><span class="linenos">5759</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-5760"><a href="#L-5760"><span class="linenos">5760</span></a>
+</span><span id="L-5761"><a href="#L-5761"><span class="linenos">5761</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5762"><a href="#L-5762"><span class="linenos">5762</span></a>
+</span><span id="L-5763"><a href="#L-5763"><span class="linenos">5763</span></a> <span class="k">def</span> <span class="nf">_match_l_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-5764"><a href="#L-5764"><span class="linenos">5764</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-5765"><a href="#L-5765"><span class="linenos">5765</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting (&quot;</span><span class="p">)</span>
+</span><span id="L-5766"><a href="#L-5766"><span class="linenos">5766</span></a>
+</span><span id="L-5767"><a href="#L-5767"><span class="linenos">5767</span></a> <span class="k">def</span> <span class="nf">_match_r_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-5768"><a href="#L-5768"><span class="linenos">5768</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="L-5769"><a href="#L-5769"><span class="linenos">5769</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">)</span>
+</span><span id="L-5770"><a href="#L-5770"><span class="linenos">5770</span></a>
+</span><span id="L-5771"><a href="#L-5771"><span class="linenos">5771</span></a> <span class="k">def</span> <span class="nf">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-5772"><a href="#L-5772"><span class="linenos">5772</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
+</span><span id="L-5773"><a href="#L-5773"><span class="linenos">5773</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-5774"><a href="#L-5774"><span class="linenos">5774</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5775"><a href="#L-5775"><span class="linenos">5775</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-5776"><a href="#L-5776"><span class="linenos">5776</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5777"><a href="#L-5777"><span class="linenos">5777</span></a>
+</span><span id="L-5778"><a href="#L-5778"><span class="linenos">5778</span></a> <span class="k">def</span> <span class="nf">_match_text_seq</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="L-5779"><a href="#L-5779"><span class="linenos">5779</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="L-5780"><a href="#L-5780"><span class="linenos">5780</span></a> <span class="k">for</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
+</span><span id="L-5781"><a href="#L-5781"><span class="linenos">5781</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="n">text</span><span class="p">:</span>
+</span><span id="L-5782"><a href="#L-5782"><span class="linenos">5782</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="L-5783"><a href="#L-5783"><span class="linenos">5783</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5784"><a href="#L-5784"><span class="linenos">5784</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-5785"><a href="#L-5785"><span class="linenos">5785</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="L-5786"><a href="#L-5786"><span class="linenos">5786</span></a>
+</span><span id="L-5787"><a href="#L-5787"><span class="linenos">5787</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="L-5788"><a href="#L-5788"><span class="linenos">5788</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-5789"><a href="#L-5789"><span class="linenos">5789</span></a>
+</span><span id="L-5790"><a href="#L-5790"><span class="linenos">5790</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="L-5791"><a href="#L-5791"><span class="linenos">5791</span></a>
+</span><span id="L-5792"><a href="#L-5792"><span class="linenos">5792</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-5793"><a href="#L-5793"><span class="linenos">5793</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="L-5794"><a href="#L-5794"><span class="linenos">5794</span></a> <span class="o">...</span>
+</span><span id="L-5795"><a href="#L-5795"><span class="linenos">5795</span></a>
+</span><span id="L-5796"><a href="#L-5796"><span class="linenos">5796</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="L-5797"><a href="#L-5797"><span class="linenos">5797</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span>
+</span><span id="L-5798"><a href="#L-5798"><span class="linenos">5798</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="L-5799"><a href="#L-5799"><span class="linenos">5799</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5800"><a href="#L-5800"><span class="linenos">5800</span></a> <span class="o">...</span>
+</span><span id="L-5801"><a href="#L-5801"><span class="linenos">5801</span></a>
+</span><span id="L-5802"><a href="#L-5802"><span class="linenos">5802</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">):</span>
+</span><span id="L-5803"><a href="#L-5803"><span class="linenos">5803</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
+</span><span id="L-5804"><a href="#L-5804"><span class="linenos">5804</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
+</span><span id="L-5805"><a href="#L-5805"><span class="linenos">5805</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
+</span><span id="L-5806"><a href="#L-5806"><span class="linenos">5806</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
+</span><span id="L-5807"><a href="#L-5807"><span class="linenos">5807</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
+</span><span id="L-5808"><a href="#L-5808"><span class="linenos">5808</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-5809"><a href="#L-5809"><span class="linenos">5809</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-5810"><a href="#L-5810"><span class="linenos">5810</span></a> <span class="p">)</span>
</span><span id="L-5811"><a href="#L-5811"><span class="linenos">5811</span></a>
-</span><span id="L-5812"><a href="#L-5812"><span class="linenos">5812</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
-</span><span id="L-5813"><a href="#L-5813"><span class="linenos">5813</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
-</span><span id="L-5814"><a href="#L-5814"><span class="linenos">5814</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
-</span><span id="L-5815"><a href="#L-5815"><span class="linenos">5815</span></a> <span class="k">break</span>
-</span><span id="L-5816"><a href="#L-5816"><span class="linenos">5816</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="L-5817"><a href="#L-5817"><span class="linenos">5817</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5818"><a href="#L-5818"><span class="linenos">5818</span></a> <span class="k">if</span> <span class="n">column</span> <span class="ow">is</span> <span class="n">node</span><span class="p">:</span>
-</span><span id="L-5819"><a href="#L-5819"><span class="linenos">5819</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
-</span><span id="L-5820"><a href="#L-5820"><span class="linenos">5820</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="L-5821"><a href="#L-5821"><span class="linenos">5821</span></a> <span class="n">column</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
-</span><span id="L-5822"><a href="#L-5822"><span class="linenos">5822</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="L-5812"><a href="#L-5812"><span class="linenos">5812</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="L-5813"><a href="#L-5813"><span class="linenos">5813</span></a>
+</span><span id="L-5814"><a href="#L-5814"><span class="linenos">5814</span></a> <span class="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span>
+</span><span id="L-5815"><a href="#L-5815"><span class="linenos">5815</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">lambda_variables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
+</span><span id="L-5816"><a href="#L-5816"><span class="linenos">5816</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="L-5817"><a href="#L-5817"><span class="linenos">5817</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
+</span><span id="L-5818"><a href="#L-5818"><span class="linenos">5818</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="L-5819"><a href="#L-5819"><span class="linenos">5819</span></a>
+</span><span id="L-5820"><a href="#L-5820"><span class="linenos">5820</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
+</span><span id="L-5821"><a href="#L-5821"><span class="linenos">5821</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">lambda_variables</span><span class="p">:</span>
+</span><span id="L-5822"><a href="#L-5822"><span class="linenos">5822</span></a> <span class="n">dot_or_id</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">to_dot</span><span class="p">()</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span>
+</span><span id="L-5823"><a href="#L-5823"><span class="linenos">5823</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="L-5824"><a href="#L-5824"><span class="linenos">5824</span></a>
+</span><span id="L-5825"><a href="#L-5825"><span class="linenos">5825</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
+</span><span id="L-5826"><a href="#L-5826"><span class="linenos">5826</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
+</span><span id="L-5827"><a href="#L-5827"><span class="linenos">5827</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
+</span><span id="L-5828"><a href="#L-5828"><span class="linenos">5828</span></a> <span class="k">break</span>
+</span><span id="L-5829"><a href="#L-5829"><span class="linenos">5829</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="L-5830"><a href="#L-5830"><span class="linenos">5830</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5831"><a href="#L-5831"><span class="linenos">5831</span></a> <span class="k">if</span> <span class="n">column</span> <span class="ow">is</span> <span class="n">node</span><span class="p">:</span>
+</span><span id="L-5832"><a href="#L-5832"><span class="linenos">5832</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
+</span><span id="L-5833"><a href="#L-5833"><span class="linenos">5833</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="L-5834"><a href="#L-5834"><span class="linenos">5834</span></a> <span class="n">column</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
+</span><span id="L-5835"><a href="#L-5835"><span class="linenos">5835</span></a> <span class="k">return</span> <span class="n">node</span>
</span></pre></div>
@@ -8741,3361 +8754,3374 @@
</span><span id="Parser-2466"><a href="#Parser-2466"><span class="linenos">2466</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="p">)</span>
</span><span id="Parser-2467"><a href="#Parser-2467"><span class="linenos">2467</span></a> <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;limit&quot;</span><span class="p">:</span>
</span><span id="Parser-2468"><a href="#Parser-2468"><span class="linenos">2468</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Parser-2469"><a href="#Parser-2469"><span class="linenos">2469</span></a> <span class="k">if</span> <span class="n">offset</span><span class="p">:</span>
-</span><span id="Parser-2470"><a href="#Parser-2470"><span class="linenos">2470</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">offset</span><span class="p">))</span>
-</span><span id="Parser-2471"><a href="#Parser-2471"><span class="linenos">2471</span></a> <span class="k">continue</span>
-</span><span id="Parser-2472"><a href="#Parser-2472"><span class="linenos">2472</span></a> <span class="k">break</span>
-</span><span id="Parser-2473"><a href="#Parser-2473"><span class="linenos">2473</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2474"><a href="#Parser-2474"><span class="linenos">2474</span></a>
-</span><span id="Parser-2475"><a href="#Parser-2475"><span class="linenos">2475</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
-</span><span id="Parser-2476"><a href="#Parser-2476"><span class="linenos">2476</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
-</span><span id="Parser-2477"><a href="#Parser-2477"><span class="linenos">2477</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-2478"><a href="#Parser-2478"><span class="linenos">2478</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">),</span> <span class="p">[]):</span>
-</span><span id="Parser-2479"><a href="#Parser-2479"><span class="linenos">2479</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="Parser-2469"><a href="#Parser-2469"><span class="linenos">2469</span></a>
+</span><span id="Parser-2470"><a href="#Parser-2470"><span class="linenos">2470</span></a> <span class="k">if</span> <span class="n">offset</span><span class="p">:</span>
+</span><span id="Parser-2471"><a href="#Parser-2471"><span class="linenos">2471</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
+</span><span id="Parser-2472"><a href="#Parser-2472"><span class="linenos">2472</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">,</span> <span class="n">offset</span><span class="p">)</span>
+</span><span id="Parser-2473"><a href="#Parser-2473"><span class="linenos">2473</span></a>
+</span><span id="Parser-2474"><a href="#Parser-2474"><span class="linenos">2474</span></a> <span class="n">limit_by_expressions</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span>
+</span><span id="Parser-2475"><a href="#Parser-2475"><span class="linenos">2475</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Parser-2476"><a href="#Parser-2476"><span class="linenos">2476</span></a> <span class="n">offset</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">limit_by_expressions</span><span class="p">)</span>
+</span><span id="Parser-2477"><a href="#Parser-2477"><span class="linenos">2477</span></a> <span class="k">continue</span>
+</span><span id="Parser-2478"><a href="#Parser-2478"><span class="linenos">2478</span></a> <span class="k">break</span>
+</span><span id="Parser-2479"><a href="#Parser-2479"><span class="linenos">2479</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-2480"><a href="#Parser-2480"><span class="linenos">2480</span></a>
-</span><span id="Parser-2481"><a href="#Parser-2481"><span class="linenos">2481</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
-</span><span id="Parser-2482"><a href="#Parser-2482"><span class="linenos">2482</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
-</span><span id="Parser-2483"><a href="#Parser-2483"><span class="linenos">2483</span></a>
-</span><span id="Parser-2484"><a href="#Parser-2484"><span class="linenos">2484</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">hints</span><span class="p">)</span>
-</span><span id="Parser-2485"><a href="#Parser-2485"><span class="linenos">2485</span></a>
-</span><span id="Parser-2486"><a href="#Parser-2486"><span class="linenos">2486</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2487"><a href="#Parser-2487"><span class="linenos">2487</span></a>
-</span><span id="Parser-2488"><a href="#Parser-2488"><span class="linenos">2488</span></a> <span class="k">def</span> <span class="nf">_parse_into</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">]:</span>
-</span><span id="Parser-2489"><a href="#Parser-2489"><span class="linenos">2489</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">):</span>
-</span><span id="Parser-2490"><a href="#Parser-2490"><span class="linenos">2490</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2481"><a href="#Parser-2481"><span class="linenos">2481</span></a> <span class="k">def</span> <span class="nf">_parse_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">]:</span>
+</span><span id="Parser-2482"><a href="#Parser-2482"><span class="linenos">2482</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HINT</span><span class="p">):</span>
+</span><span id="Parser-2483"><a href="#Parser-2483"><span class="linenos">2483</span></a> <span class="n">hints</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-2484"><a href="#Parser-2484"><span class="linenos">2484</span></a> <span class="k">for</span> <span class="n">hint</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">),</span> <span class="p">[]):</span>
+</span><span id="Parser-2485"><a href="#Parser-2485"><span class="linenos">2485</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="Parser-2486"><a href="#Parser-2486"><span class="linenos">2486</span></a>
+</span><span id="Parser-2487"><a href="#Parser-2487"><span class="linenos">2487</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SLASH</span><span class="p">):</span>
+</span><span id="Parser-2488"><a href="#Parser-2488"><span class="linenos">2488</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected */ after HINT&quot;</span><span class="p">)</span>
+</span><span id="Parser-2489"><a href="#Parser-2489"><span class="linenos">2489</span></a>
+</span><span id="Parser-2490"><a href="#Parser-2490"><span class="linenos">2490</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">hints</span><span class="p">)</span>
</span><span id="Parser-2491"><a href="#Parser-2491"><span class="linenos">2491</span></a>
-</span><span id="Parser-2492"><a href="#Parser-2492"><span class="linenos">2492</span></a> <span class="n">temp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">)</span>
-</span><span id="Parser-2493"><a href="#Parser-2493"><span class="linenos">2493</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)</span>
-</span><span id="Parser-2494"><a href="#Parser-2494"><span class="linenos">2494</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
-</span><span id="Parser-2495"><a href="#Parser-2495"><span class="linenos">2495</span></a>
-</span><span id="Parser-2496"><a href="#Parser-2496"><span class="linenos">2496</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2497"><a href="#Parser-2497"><span class="linenos">2497</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="n">temporary</span><span class="o">=</span><span class="n">temp</span><span class="p">,</span> <span class="n">unlogged</span><span class="o">=</span><span class="n">unlogged</span>
-</span><span id="Parser-2498"><a href="#Parser-2498"><span class="linenos">2498</span></a> <span class="p">)</span>
-</span><span id="Parser-2499"><a href="#Parser-2499"><span class="linenos">2499</span></a>
-</span><span id="Parser-2500"><a href="#Parser-2500"><span class="linenos">2500</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
-</span><span id="Parser-2501"><a href="#Parser-2501"><span class="linenos">2501</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">skip_from_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-2502"><a href="#Parser-2502"><span class="linenos">2502</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">]:</span>
-</span><span id="Parser-2503"><a href="#Parser-2503"><span class="linenos">2503</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_from_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
-</span><span id="Parser-2504"><a href="#Parser-2504"><span class="linenos">2504</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2492"><a href="#Parser-2492"><span class="linenos">2492</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2493"><a href="#Parser-2493"><span class="linenos">2493</span></a>
+</span><span id="Parser-2494"><a href="#Parser-2494"><span class="linenos">2494</span></a> <span class="k">def</span> <span class="nf">_parse_into</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">]:</span>
+</span><span id="Parser-2495"><a href="#Parser-2495"><span class="linenos">2495</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">):</span>
+</span><span id="Parser-2496"><a href="#Parser-2496"><span class="linenos">2496</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2497"><a href="#Parser-2497"><span class="linenos">2497</span></a>
+</span><span id="Parser-2498"><a href="#Parser-2498"><span class="linenos">2498</span></a> <span class="n">temp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TEMPORARY</span><span class="p">)</span>
+</span><span id="Parser-2499"><a href="#Parser-2499"><span class="linenos">2499</span></a> <span class="n">unlogged</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNLOGGED&quot;</span><span class="p">)</span>
+</span><span id="Parser-2500"><a href="#Parser-2500"><span class="linenos">2500</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
+</span><span id="Parser-2501"><a href="#Parser-2501"><span class="linenos">2501</span></a>
+</span><span id="Parser-2502"><a href="#Parser-2502"><span class="linenos">2502</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2503"><a href="#Parser-2503"><span class="linenos">2503</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Into</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="n">temporary</span><span class="o">=</span><span class="n">temp</span><span class="p">,</span> <span class="n">unlogged</span><span class="o">=</span><span class="n">unlogged</span>
+</span><span id="Parser-2504"><a href="#Parser-2504"><span class="linenos">2504</span></a> <span class="p">)</span>
</span><span id="Parser-2505"><a href="#Parser-2505"><span class="linenos">2505</span></a>
-</span><span id="Parser-2506"><a href="#Parser-2506"><span class="linenos">2506</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2507"><a href="#Parser-2507"><span class="linenos">2507</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">)</span>
-</span><span id="Parser-2508"><a href="#Parser-2508"><span class="linenos">2508</span></a> <span class="p">)</span>
-</span><span id="Parser-2509"><a href="#Parser-2509"><span class="linenos">2509</span></a>
-</span><span id="Parser-2510"><a href="#Parser-2510"><span class="linenos">2510</span></a> <span class="k">def</span> <span class="nf">_parse_match_recognize</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">]:</span>
-</span><span id="Parser-2511"><a href="#Parser-2511"><span class="linenos">2511</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">):</span>
-</span><span id="Parser-2512"><a href="#Parser-2512"><span class="linenos">2512</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2513"><a href="#Parser-2513"><span class="linenos">2513</span></a>
-</span><span id="Parser-2514"><a href="#Parser-2514"><span class="linenos">2514</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="Parser-2506"><a href="#Parser-2506"><span class="linenos">2506</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
+</span><span id="Parser-2507"><a href="#Parser-2507"><span class="linenos">2507</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">skip_from_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-2508"><a href="#Parser-2508"><span class="linenos">2508</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">]:</span>
+</span><span id="Parser-2509"><a href="#Parser-2509"><span class="linenos">2509</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_from_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
+</span><span id="Parser-2510"><a href="#Parser-2510"><span class="linenos">2510</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2511"><a href="#Parser-2511"><span class="linenos">2511</span></a>
+</span><span id="Parser-2512"><a href="#Parser-2512"><span class="linenos">2512</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2513"><a href="#Parser-2513"><span class="linenos">2513</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">joins</span><span class="o">=</span><span class="n">joins</span><span class="p">)</span>
+</span><span id="Parser-2514"><a href="#Parser-2514"><span class="linenos">2514</span></a> <span class="p">)</span>
</span><span id="Parser-2515"><a href="#Parser-2515"><span class="linenos">2515</span></a>
-</span><span id="Parser-2516"><a href="#Parser-2516"><span class="linenos">2516</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">()</span>
-</span><span id="Parser-2517"><a href="#Parser-2517"><span class="linenos">2517</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
-</span><span id="Parser-2518"><a href="#Parser-2518"><span class="linenos">2518</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MEASURES&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2516"><a href="#Parser-2516"><span class="linenos">2516</span></a> <span class="k">def</span> <span class="nf">_parse_match_recognize</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">]:</span>
+</span><span id="Parser-2517"><a href="#Parser-2517"><span class="linenos">2517</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">MATCH_RECOGNIZE</span><span class="p">):</span>
+</span><span id="Parser-2518"><a href="#Parser-2518"><span class="linenos">2518</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2519"><a href="#Parser-2519"><span class="linenos">2519</span></a>
-</span><span id="Parser-2520"><a href="#Parser-2520"><span class="linenos">2520</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
-</span><span id="Parser-2521"><a href="#Parser-2521"><span class="linenos">2521</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
-</span><span id="Parser-2522"><a href="#Parser-2522"><span class="linenos">2522</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
-</span><span id="Parser-2523"><a href="#Parser-2523"><span class="linenos">2523</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;ALL ROWS PER MATCH&quot;</span>
-</span><span id="Parser-2524"><a href="#Parser-2524"><span class="linenos">2524</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SHOW&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
-</span><span id="Parser-2525"><a href="#Parser-2525"><span class="linenos">2525</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; SHOW EMPTY MATCHES&quot;</span>
-</span><span id="Parser-2526"><a href="#Parser-2526"><span class="linenos">2526</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
-</span><span id="Parser-2527"><a href="#Parser-2527"><span class="linenos">2527</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; OMIT EMPTY MATCHES&quot;</span>
-</span><span id="Parser-2528"><a href="#Parser-2528"><span class="linenos">2528</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNMATCHED&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
-</span><span id="Parser-2529"><a href="#Parser-2529"><span class="linenos">2529</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; WITH UNMATCHED ROWS&quot;</span>
-</span><span id="Parser-2530"><a href="#Parser-2530"><span class="linenos">2530</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Parser-2531"><a href="#Parser-2531"><span class="linenos">2531</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2532"><a href="#Parser-2532"><span class="linenos">2532</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2533"><a href="#Parser-2533"><span class="linenos">2533</span></a>
-</span><span id="Parser-2534"><a href="#Parser-2534"><span class="linenos">2534</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AFTER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;SKIP&quot;</span><span class="p">):</span>
-</span><span id="Parser-2535"><a href="#Parser-2535"><span class="linenos">2535</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
-</span><span id="Parser-2536"><a href="#Parser-2536"><span class="linenos">2536</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PAST&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
-</span><span id="Parser-2537"><a href="#Parser-2537"><span class="linenos">2537</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; PAST LAST ROW&quot;</span>
-</span><span id="Parser-2538"><a href="#Parser-2538"><span class="linenos">2538</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;NEXT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
-</span><span id="Parser-2539"><a href="#Parser-2539"><span class="linenos">2539</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; TO NEXT ROW&quot;</span>
-</span><span id="Parser-2540"><a href="#Parser-2540"><span class="linenos">2540</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">):</span>
-</span><span id="Parser-2541"><a href="#Parser-2541"><span class="linenos">2541</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO FIRST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-2542"><a href="#Parser-2542"><span class="linenos">2542</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
-</span><span id="Parser-2543"><a href="#Parser-2543"><span class="linenos">2543</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO LAST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-2544"><a href="#Parser-2544"><span class="linenos">2544</span></a> <span class="n">after</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Parser-2545"><a href="#Parser-2545"><span class="linenos">2545</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2546"><a href="#Parser-2546"><span class="linenos">2546</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2547"><a href="#Parser-2547"><span class="linenos">2547</span></a>
-</span><span id="Parser-2548"><a href="#Parser-2548"><span class="linenos">2548</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATTERN&quot;</span><span class="p">):</span>
-</span><span id="Parser-2549"><a href="#Parser-2549"><span class="linenos">2549</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="Parser-2550"><a href="#Parser-2550"><span class="linenos">2550</span></a>
-</span><span id="Parser-2551"><a href="#Parser-2551"><span class="linenos">2551</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-2552"><a href="#Parser-2552"><span class="linenos">2552</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="Parser-2520"><a href="#Parser-2520"><span class="linenos">2520</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="Parser-2521"><a href="#Parser-2521"><span class="linenos">2521</span></a>
+</span><span id="Parser-2522"><a href="#Parser-2522"><span class="linenos">2522</span></a> <span class="n">partition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">()</span>
+</span><span id="Parser-2523"><a href="#Parser-2523"><span class="linenos">2523</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
+</span><span id="Parser-2524"><a href="#Parser-2524"><span class="linenos">2524</span></a> <span class="n">measures</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MEASURES&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2525"><a href="#Parser-2525"><span class="linenos">2525</span></a>
+</span><span id="Parser-2526"><a href="#Parser-2526"><span class="linenos">2526</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONE&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
+</span><span id="Parser-2527"><a href="#Parser-2527"><span class="linenos">2527</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;ONE ROW PER MATCH&quot;</span><span class="p">)</span>
+</span><span id="Parser-2528"><a href="#Parser-2528"><span class="linenos">2528</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALL&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">,</span> <span class="s2">&quot;PER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">):</span>
+</span><span id="Parser-2529"><a href="#Parser-2529"><span class="linenos">2529</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;ALL ROWS PER MATCH&quot;</span>
+</span><span id="Parser-2530"><a href="#Parser-2530"><span class="linenos">2530</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SHOW&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
+</span><span id="Parser-2531"><a href="#Parser-2531"><span class="linenos">2531</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; SHOW EMPTY MATCHES&quot;</span>
+</span><span id="Parser-2532"><a href="#Parser-2532"><span class="linenos">2532</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OMIT&quot;</span><span class="p">,</span> <span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCHES&quot;</span><span class="p">):</span>
+</span><span id="Parser-2533"><a href="#Parser-2533"><span class="linenos">2533</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; OMIT EMPTY MATCHES&quot;</span>
+</span><span id="Parser-2534"><a href="#Parser-2534"><span class="linenos">2534</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNMATCHED&quot;</span><span class="p">,</span> <span class="s2">&quot;ROWS&quot;</span><span class="p">):</span>
+</span><span id="Parser-2535"><a href="#Parser-2535"><span class="linenos">2535</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; WITH UNMATCHED ROWS&quot;</span>
+</span><span id="Parser-2536"><a href="#Parser-2536"><span class="linenos">2536</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-2537"><a href="#Parser-2537"><span class="linenos">2537</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2538"><a href="#Parser-2538"><span class="linenos">2538</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2539"><a href="#Parser-2539"><span class="linenos">2539</span></a>
+</span><span id="Parser-2540"><a href="#Parser-2540"><span class="linenos">2540</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AFTER&quot;</span><span class="p">,</span> <span class="s2">&quot;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;SKIP&quot;</span><span class="p">):</span>
+</span><span id="Parser-2541"><a href="#Parser-2541"><span class="linenos">2541</span></a> <span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;AFTER MATCH SKIP&quot;</span>
+</span><span id="Parser-2542"><a href="#Parser-2542"><span class="linenos">2542</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PAST&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
+</span><span id="Parser-2543"><a href="#Parser-2543"><span class="linenos">2543</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; PAST LAST ROW&quot;</span>
+</span><span id="Parser-2544"><a href="#Parser-2544"><span class="linenos">2544</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;NEXT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
+</span><span id="Parser-2545"><a href="#Parser-2545"><span class="linenos">2545</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="s2">&quot; TO NEXT ROW&quot;</span>
+</span><span id="Parser-2546"><a href="#Parser-2546"><span class="linenos">2546</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">):</span>
+</span><span id="Parser-2547"><a href="#Parser-2547"><span class="linenos">2547</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO FIRST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-2548"><a href="#Parser-2548"><span class="linenos">2548</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
+</span><span id="Parser-2549"><a href="#Parser-2549"><span class="linenos">2549</span></a> <span class="n">text</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot; TO LAST </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-2550"><a href="#Parser-2550"><span class="linenos">2550</span></a> <span class="n">after</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-2551"><a href="#Parser-2551"><span class="linenos">2551</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2552"><a href="#Parser-2552"><span class="linenos">2552</span></a> <span class="n">after</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2553"><a href="#Parser-2553"><span class="linenos">2553</span></a>
-</span><span id="Parser-2554"><a href="#Parser-2554"><span class="linenos">2554</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="Parser-2555"><a href="#Parser-2555"><span class="linenos">2555</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
+</span><span id="Parser-2554"><a href="#Parser-2554"><span class="linenos">2554</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATTERN&quot;</span><span class="p">):</span>
+</span><span id="Parser-2555"><a href="#Parser-2555"><span class="linenos">2555</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
</span><span id="Parser-2556"><a href="#Parser-2556"><span class="linenos">2556</span></a>
-</span><span id="Parser-2557"><a href="#Parser-2557"><span class="linenos">2557</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="Parser-2558"><a href="#Parser-2558"><span class="linenos">2558</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
-</span><span id="Parser-2559"><a href="#Parser-2559"><span class="linenos">2559</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
-</span><span id="Parser-2560"><a href="#Parser-2560"><span class="linenos">2560</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">:</span>
-</span><span id="Parser-2561"><a href="#Parser-2561"><span class="linenos">2561</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
+</span><span id="Parser-2557"><a href="#Parser-2557"><span class="linenos">2557</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-2558"><a href="#Parser-2558"><span class="linenos">2558</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="Parser-2559"><a href="#Parser-2559"><span class="linenos">2559</span></a>
+</span><span id="Parser-2560"><a href="#Parser-2560"><span class="linenos">2560</span></a> <span class="n">paren</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="Parser-2561"><a href="#Parser-2561"><span class="linenos">2561</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
</span><span id="Parser-2562"><a href="#Parser-2562"><span class="linenos">2562</span></a>
-</span><span id="Parser-2563"><a href="#Parser-2563"><span class="linenos">2563</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="Parser-2564"><a href="#Parser-2564"><span class="linenos">2564</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-2565"><a href="#Parser-2565"><span class="linenos">2565</span></a>
-</span><span id="Parser-2566"><a href="#Parser-2566"><span class="linenos">2566</span></a> <span class="k">if</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="Parser-2567"><a href="#Parser-2567"><span class="linenos">2567</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="Parser-2563"><a href="#Parser-2563"><span class="linenos">2563</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="Parser-2564"><a href="#Parser-2564"><span class="linenos">2564</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
+</span><span id="Parser-2565"><a href="#Parser-2565"><span class="linenos">2565</span></a> <span class="n">paren</span> <span class="o">+=</span> <span class="mi">1</span>
+</span><span id="Parser-2566"><a href="#Parser-2566"><span class="linenos">2566</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">:</span>
+</span><span id="Parser-2567"><a href="#Parser-2567"><span class="linenos">2567</span></a> <span class="n">paren</span> <span class="o">-=</span> <span class="mi">1</span>
</span><span id="Parser-2568"><a href="#Parser-2568"><span class="linenos">2568</span></a>
-</span><span id="Parser-2569"><a href="#Parser-2569"><span class="linenos">2569</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
-</span><span id="Parser-2570"><a href="#Parser-2570"><span class="linenos">2570</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2571"><a href="#Parser-2571"><span class="linenos">2571</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2572"><a href="#Parser-2572"><span class="linenos">2572</span></a>
-</span><span id="Parser-2573"><a href="#Parser-2573"><span class="linenos">2573</span></a> <span class="n">define</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-2574"><a href="#Parser-2574"><span class="linenos">2574</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_name_as_expression</span><span class="p">)</span>
-</span><span id="Parser-2575"><a href="#Parser-2575"><span class="linenos">2575</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFINE&quot;</span><span class="p">)</span>
-</span><span id="Parser-2576"><a href="#Parser-2576"><span class="linenos">2576</span></a> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2577"><a href="#Parser-2577"><span class="linenos">2577</span></a> <span class="p">)</span>
+</span><span id="Parser-2569"><a href="#Parser-2569"><span class="linenos">2569</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="Parser-2570"><a href="#Parser-2570"><span class="linenos">2570</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-2571"><a href="#Parser-2571"><span class="linenos">2571</span></a>
+</span><span id="Parser-2572"><a href="#Parser-2572"><span class="linenos">2572</span></a> <span class="k">if</span> <span class="n">paren</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="Parser-2573"><a href="#Parser-2573"><span class="linenos">2573</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">)</span>
+</span><span id="Parser-2574"><a href="#Parser-2574"><span class="linenos">2574</span></a>
+</span><span id="Parser-2575"><a href="#Parser-2575"><span class="linenos">2575</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">))</span>
+</span><span id="Parser-2576"><a href="#Parser-2576"><span class="linenos">2576</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2577"><a href="#Parser-2577"><span class="linenos">2577</span></a> <span class="n">pattern</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2578"><a href="#Parser-2578"><span class="linenos">2578</span></a>
-</span><span id="Parser-2579"><a href="#Parser-2579"><span class="linenos">2579</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-2580"><a href="#Parser-2580"><span class="linenos">2580</span></a>
-</span><span id="Parser-2581"><a href="#Parser-2581"><span class="linenos">2581</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2582"><a href="#Parser-2582"><span class="linenos">2582</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
-</span><span id="Parser-2583"><a href="#Parser-2583"><span class="linenos">2583</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
-</span><span id="Parser-2584"><a href="#Parser-2584"><span class="linenos">2584</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="Parser-2585"><a href="#Parser-2585"><span class="linenos">2585</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
-</span><span id="Parser-2586"><a href="#Parser-2586"><span class="linenos">2586</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
-</span><span id="Parser-2587"><a href="#Parser-2587"><span class="linenos">2587</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
-</span><span id="Parser-2588"><a href="#Parser-2588"><span class="linenos">2588</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
-</span><span id="Parser-2589"><a href="#Parser-2589"><span class="linenos">2589</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
-</span><span id="Parser-2590"><a href="#Parser-2590"><span class="linenos">2590</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
-</span><span id="Parser-2591"><a href="#Parser-2591"><span class="linenos">2591</span></a> <span class="p">)</span>
-</span><span id="Parser-2592"><a href="#Parser-2592"><span class="linenos">2592</span></a>
-</span><span id="Parser-2593"><a href="#Parser-2593"><span class="linenos">2593</span></a> <span class="k">def</span> <span class="nf">_parse_lateral</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">]:</span>
-</span><span id="Parser-2594"><a href="#Parser-2594"><span class="linenos">2594</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">)</span>
-</span><span id="Parser-2595"><a href="#Parser-2595"><span class="linenos">2595</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cross_apply</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">):</span>
-</span><span id="Parser-2596"><a href="#Parser-2596"><span class="linenos">2596</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-2597"><a href="#Parser-2597"><span class="linenos">2597</span></a>
-</span><span id="Parser-2598"><a href="#Parser-2598"><span class="linenos">2598</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-2599"><a href="#Parser-2599"><span class="linenos">2599</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2600"><a href="#Parser-2600"><span class="linenos">2600</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2601"><a href="#Parser-2601"><span class="linenos">2601</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2602"><a href="#Parser-2602"><span class="linenos">2602</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LATERAL</span><span class="p">):</span>
-</span><span id="Parser-2603"><a href="#Parser-2603"><span class="linenos">2603</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2604"><a href="#Parser-2604"><span class="linenos">2604</span></a> <span class="n">view</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">)</span>
-</span><span id="Parser-2605"><a href="#Parser-2605"><span class="linenos">2605</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">)</span>
-</span><span id="Parser-2606"><a href="#Parser-2606"><span class="linenos">2606</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2607"><a href="#Parser-2607"><span class="linenos">2607</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2608"><a href="#Parser-2608"><span class="linenos">2608</span></a>
-</span><span id="Parser-2609"><a href="#Parser-2609"><span class="linenos">2609</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Parser-2610"><a href="#Parser-2610"><span class="linenos">2610</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-2611"><a href="#Parser-2611"><span class="linenos">2611</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
-</span><span id="Parser-2612"><a href="#Parser-2612"><span class="linenos">2612</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
-</span><span id="Parser-2613"><a href="#Parser-2613"><span class="linenos">2613</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-2614"><a href="#Parser-2614"><span class="linenos">2614</span></a> <span class="p">)</span>
-</span><span id="Parser-2615"><a href="#Parser-2615"><span class="linenos">2615</span></a>
-</span><span id="Parser-2616"><a href="#Parser-2616"><span class="linenos">2616</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
-</span><span id="Parser-2617"><a href="#Parser-2617"><span class="linenos">2617</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">(</span>
-</span><span id="Parser-2618"><a href="#Parser-2618"><span class="linenos">2618</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-2619"><a href="#Parser-2619"><span class="linenos">2619</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
-</span><span id="Parser-2620"><a href="#Parser-2620"><span class="linenos">2620</span></a> <span class="p">)</span>
+</span><span id="Parser-2579"><a href="#Parser-2579"><span class="linenos">2579</span></a> <span class="n">define</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-2580"><a href="#Parser-2580"><span class="linenos">2580</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_name_as_expression</span><span class="p">)</span>
+</span><span id="Parser-2581"><a href="#Parser-2581"><span class="linenos">2581</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFINE&quot;</span><span class="p">)</span>
+</span><span id="Parser-2582"><a href="#Parser-2582"><span class="linenos">2582</span></a> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2583"><a href="#Parser-2583"><span class="linenos">2583</span></a> <span class="p">)</span>
+</span><span id="Parser-2584"><a href="#Parser-2584"><span class="linenos">2584</span></a>
+</span><span id="Parser-2585"><a href="#Parser-2585"><span class="linenos">2585</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-2586"><a href="#Parser-2586"><span class="linenos">2586</span></a>
+</span><span id="Parser-2587"><a href="#Parser-2587"><span class="linenos">2587</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2588"><a href="#Parser-2588"><span class="linenos">2588</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchRecognize</span><span class="p">,</span>
+</span><span id="Parser-2589"><a href="#Parser-2589"><span class="linenos">2589</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
+</span><span id="Parser-2590"><a href="#Parser-2590"><span class="linenos">2590</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="Parser-2591"><a href="#Parser-2591"><span class="linenos">2591</span></a> <span class="n">measures</span><span class="o">=</span><span class="n">measures</span><span class="p">,</span>
+</span><span id="Parser-2592"><a href="#Parser-2592"><span class="linenos">2592</span></a> <span class="n">rows</span><span class="o">=</span><span class="n">rows</span><span class="p">,</span>
+</span><span id="Parser-2593"><a href="#Parser-2593"><span class="linenos">2593</span></a> <span class="n">after</span><span class="o">=</span><span class="n">after</span><span class="p">,</span>
+</span><span id="Parser-2594"><a href="#Parser-2594"><span class="linenos">2594</span></a> <span class="n">pattern</span><span class="o">=</span><span class="n">pattern</span><span class="p">,</span>
+</span><span id="Parser-2595"><a href="#Parser-2595"><span class="linenos">2595</span></a> <span class="n">define</span><span class="o">=</span><span class="n">define</span><span class="p">,</span>
+</span><span id="Parser-2596"><a href="#Parser-2596"><span class="linenos">2596</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(),</span>
+</span><span id="Parser-2597"><a href="#Parser-2597"><span class="linenos">2597</span></a> <span class="p">)</span>
+</span><span id="Parser-2598"><a href="#Parser-2598"><span class="linenos">2598</span></a>
+</span><span id="Parser-2599"><a href="#Parser-2599"><span class="linenos">2599</span></a> <span class="k">def</span> <span class="nf">_parse_lateral</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">]:</span>
+</span><span id="Parser-2600"><a href="#Parser-2600"><span class="linenos">2600</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">)</span>
+</span><span id="Parser-2601"><a href="#Parser-2601"><span class="linenos">2601</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">cross_apply</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">):</span>
+</span><span id="Parser-2602"><a href="#Parser-2602"><span class="linenos">2602</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-2603"><a href="#Parser-2603"><span class="linenos">2603</span></a>
+</span><span id="Parser-2604"><a href="#Parser-2604"><span class="linenos">2604</span></a> <span class="k">if</span> <span class="n">cross_apply</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-2605"><a href="#Parser-2605"><span class="linenos">2605</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2606"><a href="#Parser-2606"><span class="linenos">2606</span></a> <span class="n">view</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2607"><a href="#Parser-2607"><span class="linenos">2607</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2608"><a href="#Parser-2608"><span class="linenos">2608</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LATERAL</span><span class="p">):</span>
+</span><span id="Parser-2609"><a href="#Parser-2609"><span class="linenos">2609</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2610"><a href="#Parser-2610"><span class="linenos">2610</span></a> <span class="n">view</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VIEW</span><span class="p">)</span>
+</span><span id="Parser-2611"><a href="#Parser-2611"><span class="linenos">2611</span></a> <span class="n">outer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">)</span>
+</span><span id="Parser-2612"><a href="#Parser-2612"><span class="linenos">2612</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2613"><a href="#Parser-2613"><span class="linenos">2613</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2614"><a href="#Parser-2614"><span class="linenos">2614</span></a>
+</span><span id="Parser-2615"><a href="#Parser-2615"><span class="linenos">2615</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Parser-2616"><a href="#Parser-2616"><span class="linenos">2616</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-2617"><a href="#Parser-2617"><span class="linenos">2617</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
+</span><span id="Parser-2618"><a href="#Parser-2618"><span class="linenos">2618</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
+</span><span id="Parser-2619"><a href="#Parser-2619"><span class="linenos">2619</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-2620"><a href="#Parser-2620"><span class="linenos">2620</span></a> <span class="p">)</span>
</span><span id="Parser-2621"><a href="#Parser-2621"><span class="linenos">2621</span></a>
-</span><span id="Parser-2622"><a href="#Parser-2622"><span class="linenos">2622</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
-</span><span id="Parser-2623"><a href="#Parser-2623"><span class="linenos">2623</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-2624"><a href="#Parser-2624"><span class="linenos">2624</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="k">else</span> <span class="p">[]</span>
-</span><span id="Parser-2625"><a href="#Parser-2625"><span class="linenos">2625</span></a> <span class="n">table_alias</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2626"><a href="#Parser-2626"><span class="linenos">2626</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span>
-</span><span id="Parser-2627"><a href="#Parser-2627"><span class="linenos">2627</span></a> <span class="p">)</span>
-</span><span id="Parser-2628"><a href="#Parser-2628"><span class="linenos">2628</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">))</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-2629"><a href="#Parser-2629"><span class="linenos">2629</span></a> <span class="c1"># We move the alias from the lateral&#39;s child node to the lateral itself</span>
-</span><span id="Parser-2630"><a href="#Parser-2630"><span class="linenos">2630</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="Parser-2631"><a href="#Parser-2631"><span class="linenos">2631</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2632"><a href="#Parser-2632"><span class="linenos">2632</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
-</span><span id="Parser-2633"><a href="#Parser-2633"><span class="linenos">2633</span></a>
-</span><span id="Parser-2634"><a href="#Parser-2634"><span class="linenos">2634</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2635"><a href="#Parser-2635"><span class="linenos">2635</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span>
-</span><span id="Parser-2636"><a href="#Parser-2636"><span class="linenos">2636</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-2637"><a href="#Parser-2637"><span class="linenos">2637</span></a> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span>
-</span><span id="Parser-2638"><a href="#Parser-2638"><span class="linenos">2638</span></a> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span>
-</span><span id="Parser-2639"><a href="#Parser-2639"><span class="linenos">2639</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">table_alias</span><span class="p">,</span>
-</span><span id="Parser-2640"><a href="#Parser-2640"><span class="linenos">2640</span></a> <span class="n">cross_apply</span><span class="o">=</span><span class="n">cross_apply</span><span class="p">,</span>
-</span><span id="Parser-2641"><a href="#Parser-2641"><span class="linenos">2641</span></a> <span class="p">)</span>
-</span><span id="Parser-2642"><a href="#Parser-2642"><span class="linenos">2642</span></a>
-</span><span id="Parser-2643"><a href="#Parser-2643"><span class="linenos">2643</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
-</span><span id="Parser-2644"><a href="#Parser-2644"><span class="linenos">2644</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-2645"><a href="#Parser-2645"><span class="linenos">2645</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]]:</span>
-</span><span id="Parser-2646"><a href="#Parser-2646"><span class="linenos">2646</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Parser-2647"><a href="#Parser-2647"><span class="linenos">2647</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_METHODS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="Parser-2648"><a href="#Parser-2648"><span class="linenos">2648</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="Parser-2649"><a href="#Parser-2649"><span class="linenos">2649</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
-</span><span id="Parser-2650"><a href="#Parser-2650"><span class="linenos">2650</span></a> <span class="p">)</span>
-</span><span id="Parser-2651"><a href="#Parser-2651"><span class="linenos">2651</span></a>
-</span><span id="Parser-2652"><a href="#Parser-2652"><span class="linenos">2652</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
-</span><span id="Parser-2653"><a href="#Parser-2653"><span class="linenos">2653</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-2654"><a href="#Parser-2654"><span class="linenos">2654</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
-</span><span id="Parser-2655"><a href="#Parser-2655"><span class="linenos">2655</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="Parser-2656"><a href="#Parser-2656"><span class="linenos">2656</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
+</span><span id="Parser-2622"><a href="#Parser-2622"><span class="linenos">2622</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
+</span><span id="Parser-2623"><a href="#Parser-2623"><span class="linenos">2623</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">(</span>
+</span><span id="Parser-2624"><a href="#Parser-2624"><span class="linenos">2624</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-2625"><a href="#Parser-2625"><span class="linenos">2625</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
+</span><span id="Parser-2626"><a href="#Parser-2626"><span class="linenos">2626</span></a> <span class="p">)</span>
+</span><span id="Parser-2627"><a href="#Parser-2627"><span class="linenos">2627</span></a>
+</span><span id="Parser-2628"><a href="#Parser-2628"><span class="linenos">2628</span></a> <span class="k">if</span> <span class="n">view</span><span class="p">:</span>
+</span><span id="Parser-2629"><a href="#Parser-2629"><span class="linenos">2629</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-2630"><a href="#Parser-2630"><span class="linenos">2630</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="k">else</span> <span class="p">[]</span>
+</span><span id="Parser-2631"><a href="#Parser-2631"><span class="linenos">2631</span></a> <span class="n">table_alias</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2632"><a href="#Parser-2632"><span class="linenos">2632</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span>
+</span><span id="Parser-2633"><a href="#Parser-2633"><span class="linenos">2633</span></a> <span class="p">)</span>
+</span><span id="Parser-2634"><a href="#Parser-2634"><span class="linenos">2634</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Subquery</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">))</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-2635"><a href="#Parser-2635"><span class="linenos">2635</span></a> <span class="c1"># We move the alias from the lateral&#39;s child node to the lateral itself</span>
+</span><span id="Parser-2636"><a href="#Parser-2636"><span class="linenos">2636</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+</span><span id="Parser-2637"><a href="#Parser-2637"><span class="linenos">2637</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2638"><a href="#Parser-2638"><span class="linenos">2638</span></a> <span class="n">table_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
+</span><span id="Parser-2639"><a href="#Parser-2639"><span class="linenos">2639</span></a>
+</span><span id="Parser-2640"><a href="#Parser-2640"><span class="linenos">2640</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2641"><a href="#Parser-2641"><span class="linenos">2641</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Lateral</span><span class="p">,</span>
+</span><span id="Parser-2642"><a href="#Parser-2642"><span class="linenos">2642</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-2643"><a href="#Parser-2643"><span class="linenos">2643</span></a> <span class="n">view</span><span class="o">=</span><span class="n">view</span><span class="p">,</span>
+</span><span id="Parser-2644"><a href="#Parser-2644"><span class="linenos">2644</span></a> <span class="n">outer</span><span class="o">=</span><span class="n">outer</span><span class="p">,</span>
+</span><span id="Parser-2645"><a href="#Parser-2645"><span class="linenos">2645</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">table_alias</span><span class="p">,</span>
+</span><span id="Parser-2646"><a href="#Parser-2646"><span class="linenos">2646</span></a> <span class="n">cross_apply</span><span class="o">=</span><span class="n">cross_apply</span><span class="p">,</span>
+</span><span id="Parser-2647"><a href="#Parser-2647"><span class="linenos">2647</span></a> <span class="p">)</span>
+</span><span id="Parser-2648"><a href="#Parser-2648"><span class="linenos">2648</span></a>
+</span><span id="Parser-2649"><a href="#Parser-2649"><span class="linenos">2649</span></a> <span class="k">def</span> <span class="nf">_parse_join_parts</span><span class="p">(</span>
+</span><span id="Parser-2650"><a href="#Parser-2650"><span class="linenos">2650</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-2651"><a href="#Parser-2651"><span class="linenos">2651</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]]:</span>
+</span><span id="Parser-2652"><a href="#Parser-2652"><span class="linenos">2652</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Parser-2653"><a href="#Parser-2653"><span class="linenos">2653</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_METHODS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="Parser-2654"><a href="#Parser-2654"><span class="linenos">2654</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="Parser-2655"><a href="#Parser-2655"><span class="linenos">2655</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_KINDS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">,</span>
+</span><span id="Parser-2656"><a href="#Parser-2656"><span class="linenos">2656</span></a> <span class="p">)</span>
</span><span id="Parser-2657"><a href="#Parser-2657"><span class="linenos">2657</span></a>
-</span><span id="Parser-2658"><a href="#Parser-2658"><span class="linenos">2658</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-2659"><a href="#Parser-2659"><span class="linenos">2659</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">()</span>
-</span><span id="Parser-2660"><a href="#Parser-2660"><span class="linenos">2660</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2661"><a href="#Parser-2661"><span class="linenos">2661</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN</span><span class="p">)</span>
-</span><span id="Parser-2662"><a href="#Parser-2662"><span class="linenos">2662</span></a>
-</span><span id="Parser-2663"><a href="#Parser-2663"><span class="linenos">2663</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span><span class="p">:</span>
-</span><span id="Parser-2664"><a href="#Parser-2664"><span class="linenos">2664</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-2665"><a href="#Parser-2665"><span class="linenos">2665</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2666"><a href="#Parser-2666"><span class="linenos">2666</span></a> <span class="n">method</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2667"><a href="#Parser-2667"><span class="linenos">2667</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2658"><a href="#Parser-2658"><span class="linenos">2658</span></a> <span class="k">def</span> <span class="nf">_parse_join</span><span class="p">(</span>
+</span><span id="Parser-2659"><a href="#Parser-2659"><span class="linenos">2659</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">skip_join_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-2660"><a href="#Parser-2660"><span class="linenos">2660</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]:</span>
+</span><span id="Parser-2661"><a href="#Parser-2661"><span class="linenos">2661</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="Parser-2662"><a href="#Parser-2662"><span class="linenos">2662</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
+</span><span id="Parser-2663"><a href="#Parser-2663"><span class="linenos">2663</span></a>
+</span><span id="Parser-2664"><a href="#Parser-2664"><span class="linenos">2664</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-2665"><a href="#Parser-2665"><span class="linenos">2665</span></a> <span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_parts</span><span class="p">()</span>
+</span><span id="Parser-2666"><a href="#Parser-2666"><span class="linenos">2666</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JOIN_HINTS</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2667"><a href="#Parser-2667"><span class="linenos">2667</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">JOIN</span><span class="p">)</span>
</span><span id="Parser-2668"><a href="#Parser-2668"><span class="linenos">2668</span></a>
-</span><span id="Parser-2669"><a href="#Parser-2669"><span class="linenos">2669</span></a> <span class="n">outer_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-2670"><a href="#Parser-2670"><span class="linenos">2670</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-2671"><a href="#Parser-2671"><span class="linenos">2671</span></a>
-</span><span id="Parser-2672"><a href="#Parser-2672"><span class="linenos">2672</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">outer_apply</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">cross_apply</span><span class="p">:</span>
-</span><span id="Parser-2673"><a href="#Parser-2673"><span class="linenos">2673</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2669"><a href="#Parser-2669"><span class="linenos">2669</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span><span class="p">:</span>
+</span><span id="Parser-2670"><a href="#Parser-2670"><span class="linenos">2670</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-2671"><a href="#Parser-2671"><span class="linenos">2671</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2672"><a href="#Parser-2672"><span class="linenos">2672</span></a> <span class="n">method</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2673"><a href="#Parser-2673"><span class="linenos">2673</span></a> <span class="n">side</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-2674"><a href="#Parser-2674"><span class="linenos">2674</span></a>
-</span><span id="Parser-2675"><a href="#Parser-2675"><span class="linenos">2675</span></a> <span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)}</span>
-</span><span id="Parser-2676"><a href="#Parser-2676"><span class="linenos">2676</span></a>
-</span><span id="Parser-2677"><a href="#Parser-2677"><span class="linenos">2677</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
-</span><span id="Parser-2678"><a href="#Parser-2678"><span class="linenos">2678</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;method&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-2679"><a href="#Parser-2679"><span class="linenos">2679</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
-</span><span id="Parser-2680"><a href="#Parser-2680"><span class="linenos">2680</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-2681"><a href="#Parser-2681"><span class="linenos">2681</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Parser-2682"><a href="#Parser-2682"><span class="linenos">2682</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kind</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-2683"><a href="#Parser-2683"><span class="linenos">2683</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
-</span><span id="Parser-2684"><a href="#Parser-2684"><span class="linenos">2684</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;hint&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hint</span>
-</span><span id="Parser-2685"><a href="#Parser-2685"><span class="linenos">2685</span></a>
-</span><span id="Parser-2686"><a href="#Parser-2686"><span class="linenos">2686</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
-</span><span id="Parser-2687"><a href="#Parser-2687"><span class="linenos">2687</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-2688"><a href="#Parser-2688"><span class="linenos">2688</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
-</span><span id="Parser-2689"><a href="#Parser-2689"><span class="linenos">2689</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="Parser-2690"><a href="#Parser-2690"><span class="linenos">2690</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">):</span>
-</span><span id="Parser-2691"><a href="#Parser-2691"><span class="linenos">2691</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-2692"><a href="#Parser-2692"><span class="linenos">2692</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">()</span>
-</span><span id="Parser-2693"><a href="#Parser-2693"><span class="linenos">2693</span></a>
-</span><span id="Parser-2694"><a href="#Parser-2694"><span class="linenos">2694</span></a> <span class="k">if</span> <span class="n">join</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
-</span><span id="Parser-2695"><a href="#Parser-2695"><span class="linenos">2695</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-2696"><a href="#Parser-2696"><span class="linenos">2696</span></a> <span class="k">elif</span> <span class="n">join</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
-</span><span id="Parser-2697"><a href="#Parser-2697"><span class="linenos">2697</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="Parser-2698"><a href="#Parser-2698"><span class="linenos">2698</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2699"><a href="#Parser-2699"><span class="linenos">2699</span></a> <span class="n">join</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2700"><a href="#Parser-2700"><span class="linenos">2700</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-2701"><a href="#Parser-2701"><span class="linenos">2701</span></a>
-</span><span id="Parser-2702"><a href="#Parser-2702"><span class="linenos">2702</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">join</span><span class="p">]</span> <span class="k">if</span> <span class="n">join</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Parser-2703"><a href="#Parser-2703"><span class="linenos">2703</span></a>
-</span><span id="Parser-2704"><a href="#Parser-2704"><span class="linenos">2704</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">if</span> <span class="n">token</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">token</span><span class="o">.</span><span class="n">comments</span><span class="p">]</span>
-</span><span id="Parser-2705"><a href="#Parser-2705"><span class="linenos">2705</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
-</span><span id="Parser-2706"><a href="#Parser-2706"><span class="linenos">2706</span></a>
-</span><span id="Parser-2707"><a href="#Parser-2707"><span class="linenos">2707</span></a> <span class="k">def</span> <span class="nf">_parse_opclass</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2708"><a href="#Parser-2708"><span class="linenos">2708</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-2709"><a href="#Parser-2709"><span class="linenos">2709</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPCLASS_FOLLOW_KEYWORDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-2710"><a href="#Parser-2710"><span class="linenos">2710</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2711"><a href="#Parser-2711"><span class="linenos">2711</span></a>
-</span><span id="Parser-2712"><a href="#Parser-2712"><span class="linenos">2712</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPTYPE_FOLLOW_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-2713"><a href="#Parser-2713"><span class="linenos">2713</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Opclass</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">())</span>
-</span><span id="Parser-2714"><a href="#Parser-2714"><span class="linenos">2714</span></a>
-</span><span id="Parser-2715"><a href="#Parser-2715"><span class="linenos">2715</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-2716"><a href="#Parser-2716"><span class="linenos">2716</span></a>
-</span><span id="Parser-2717"><a href="#Parser-2717"><span class="linenos">2717</span></a> <span class="k">def</span> <span class="nf">_parse_index</span><span class="p">(</span>
-</span><span id="Parser-2718"><a href="#Parser-2718"><span class="linenos">2718</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-2719"><a href="#Parser-2719"><span class="linenos">2719</span></a> <span class="n">index</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-2720"><a href="#Parser-2720"><span class="linenos">2720</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">]:</span>
-</span><span id="Parser-2721"><a href="#Parser-2721"><span class="linenos">2721</span></a> <span class="k">if</span> <span class="n">index</span><span class="p">:</span>
-</span><span id="Parser-2722"><a href="#Parser-2722"><span class="linenos">2722</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2723"><a href="#Parser-2723"><span class="linenos">2723</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2724"><a href="#Parser-2724"><span class="linenos">2724</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2725"><a href="#Parser-2725"><span class="linenos">2725</span></a>
-</span><span id="Parser-2726"><a href="#Parser-2726"><span class="linenos">2726</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
-</span><span id="Parser-2727"><a href="#Parser-2727"><span class="linenos">2727</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span> <span class="c1"># hive</span>
-</span><span id="Parser-2728"><a href="#Parser-2728"><span class="linenos">2728</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2729"><a href="#Parser-2729"><span class="linenos">2729</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2730"><a href="#Parser-2730"><span class="linenos">2730</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">)</span>
-</span><span id="Parser-2731"><a href="#Parser-2731"><span class="linenos">2731</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PRIMARY&quot;</span><span class="p">)</span>
-</span><span id="Parser-2732"><a href="#Parser-2732"><span class="linenos">2732</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AMP&quot;</span><span class="p">)</span>
-</span><span id="Parser-2733"><a href="#Parser-2733"><span class="linenos">2733</span></a>
-</span><span id="Parser-2734"><a href="#Parser-2734"><span class="linenos">2734</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">):</span>
-</span><span id="Parser-2735"><a href="#Parser-2735"><span class="linenos">2735</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2736"><a href="#Parser-2736"><span class="linenos">2736</span></a>
-</span><span id="Parser-2737"><a href="#Parser-2737"><span class="linenos">2737</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-2738"><a href="#Parser-2738"><span class="linenos">2738</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2675"><a href="#Parser-2675"><span class="linenos">2675</span></a> <span class="n">outer_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OUTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-2676"><a href="#Parser-2676"><span class="linenos">2676</span></a> <span class="n">cross_apply</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">APPLY</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-2677"><a href="#Parser-2677"><span class="linenos">2677</span></a>
+</span><span id="Parser-2678"><a href="#Parser-2678"><span class="linenos">2678</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_join_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">join</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">outer_apply</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">cross_apply</span><span class="p">:</span>
+</span><span id="Parser-2679"><a href="#Parser-2679"><span class="linenos">2679</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2680"><a href="#Parser-2680"><span class="linenos">2680</span></a>
+</span><span id="Parser-2681"><a href="#Parser-2681"><span class="linenos">2681</span></a> <span class="n">kwargs</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;this&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">parse_bracket</span><span class="o">=</span><span class="n">parse_bracket</span><span class="p">)}</span>
+</span><span id="Parser-2682"><a href="#Parser-2682"><span class="linenos">2682</span></a>
+</span><span id="Parser-2683"><a href="#Parser-2683"><span class="linenos">2683</span></a> <span class="k">if</span> <span class="n">method</span><span class="p">:</span>
+</span><span id="Parser-2684"><a href="#Parser-2684"><span class="linenos">2684</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;method&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">method</span><span class="o">.</span><span class="n">text</span>
+</span><span id="Parser-2685"><a href="#Parser-2685"><span class="linenos">2685</span></a> <span class="k">if</span> <span class="n">side</span><span class="p">:</span>
+</span><span id="Parser-2686"><a href="#Parser-2686"><span class="linenos">2686</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">side</span><span class="o">.</span><span class="n">text</span>
+</span><span id="Parser-2687"><a href="#Parser-2687"><span class="linenos">2687</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Parser-2688"><a href="#Parser-2688"><span class="linenos">2688</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;kind&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kind</span><span class="o">.</span><span class="n">text</span>
+</span><span id="Parser-2689"><a href="#Parser-2689"><span class="linenos">2689</span></a> <span class="k">if</span> <span class="n">hint</span><span class="p">:</span>
+</span><span id="Parser-2690"><a href="#Parser-2690"><span class="linenos">2690</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;hint&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">hint</span>
+</span><span id="Parser-2691"><a href="#Parser-2691"><span class="linenos">2691</span></a>
+</span><span id="Parser-2692"><a href="#Parser-2692"><span class="linenos">2692</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
+</span><span id="Parser-2693"><a href="#Parser-2693"><span class="linenos">2693</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-2694"><a href="#Parser-2694"><span class="linenos">2694</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
+</span><span id="Parser-2695"><a href="#Parser-2695"><span class="linenos">2695</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="Parser-2696"><a href="#Parser-2696"><span class="linenos">2696</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="p">(</span><span class="n">kind</span> <span class="ow">and</span> <span class="n">kind</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CROSS</span><span class="p">):</span>
+</span><span id="Parser-2697"><a href="#Parser-2697"><span class="linenos">2697</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-2698"><a href="#Parser-2698"><span class="linenos">2698</span></a> <span class="n">join</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">()</span>
+</span><span id="Parser-2699"><a href="#Parser-2699"><span class="linenos">2699</span></a>
+</span><span id="Parser-2700"><a href="#Parser-2700"><span class="linenos">2700</span></a> <span class="k">if</span> <span class="n">join</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
+</span><span id="Parser-2701"><a href="#Parser-2701"><span class="linenos">2701</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;on&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-2702"><a href="#Parser-2702"><span class="linenos">2702</span></a> <span class="k">elif</span> <span class="n">join</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
+</span><span id="Parser-2703"><a href="#Parser-2703"><span class="linenos">2703</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;using&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="Parser-2704"><a href="#Parser-2704"><span class="linenos">2704</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2705"><a href="#Parser-2705"><span class="linenos">2705</span></a> <span class="n">join</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2706"><a href="#Parser-2706"><span class="linenos">2706</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-2707"><a href="#Parser-2707"><span class="linenos">2707</span></a>
+</span><span id="Parser-2708"><a href="#Parser-2708"><span class="linenos">2708</span></a> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;this&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">join</span><span class="p">]</span> <span class="k">if</span> <span class="n">join</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Parser-2709"><a href="#Parser-2709"><span class="linenos">2709</span></a>
+</span><span id="Parser-2710"><a href="#Parser-2710"><span class="linenos">2710</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="p">[</span><span class="n">c</span> <span class="k">for</span> <span class="n">token</span> <span class="ow">in</span> <span class="p">(</span><span class="n">method</span><span class="p">,</span> <span class="n">side</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> <span class="k">if</span> <span class="n">token</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">token</span><span class="o">.</span><span class="n">comments</span><span class="p">]</span>
+</span><span id="Parser-2711"><a href="#Parser-2711"><span class="linenos">2711</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+</span><span id="Parser-2712"><a href="#Parser-2712"><span class="linenos">2712</span></a>
+</span><span id="Parser-2713"><a href="#Parser-2713"><span class="linenos">2713</span></a> <span class="k">def</span> <span class="nf">_parse_opclass</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2714"><a href="#Parser-2714"><span class="linenos">2714</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-2715"><a href="#Parser-2715"><span class="linenos">2715</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPCLASS_FOLLOW_KEYWORDS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-2716"><a href="#Parser-2716"><span class="linenos">2716</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2717"><a href="#Parser-2717"><span class="linenos">2717</span></a>
+</span><span id="Parser-2718"><a href="#Parser-2718"><span class="linenos">2718</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">OPTYPE_FOLLOW_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-2719"><a href="#Parser-2719"><span class="linenos">2719</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Opclass</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">())</span>
+</span><span id="Parser-2720"><a href="#Parser-2720"><span class="linenos">2720</span></a>
+</span><span id="Parser-2721"><a href="#Parser-2721"><span class="linenos">2721</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2722"><a href="#Parser-2722"><span class="linenos">2722</span></a>
+</span><span id="Parser-2723"><a href="#Parser-2723"><span class="linenos">2723</span></a> <span class="k">def</span> <span class="nf">_parse_index</span><span class="p">(</span>
+</span><span id="Parser-2724"><a href="#Parser-2724"><span class="linenos">2724</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-2725"><a href="#Parser-2725"><span class="linenos">2725</span></a> <span class="n">index</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-2726"><a href="#Parser-2726"><span class="linenos">2726</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">]:</span>
+</span><span id="Parser-2727"><a href="#Parser-2727"><span class="linenos">2727</span></a> <span class="k">if</span> <span class="n">index</span><span class="p">:</span>
+</span><span id="Parser-2728"><a href="#Parser-2728"><span class="linenos">2728</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2729"><a href="#Parser-2729"><span class="linenos">2729</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2730"><a href="#Parser-2730"><span class="linenos">2730</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2731"><a href="#Parser-2731"><span class="linenos">2731</span></a>
+</span><span id="Parser-2732"><a href="#Parser-2732"><span class="linenos">2732</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
+</span><span id="Parser-2733"><a href="#Parser-2733"><span class="linenos">2733</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span> <span class="c1"># hive</span>
+</span><span id="Parser-2734"><a href="#Parser-2734"><span class="linenos">2734</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2735"><a href="#Parser-2735"><span class="linenos">2735</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2736"><a href="#Parser-2736"><span class="linenos">2736</span></a> <span class="n">unique</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNIQUE</span><span class="p">)</span>
+</span><span id="Parser-2737"><a href="#Parser-2737"><span class="linenos">2737</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PRIMARY&quot;</span><span class="p">)</span>
+</span><span id="Parser-2738"><a href="#Parser-2738"><span class="linenos">2738</span></a> <span class="n">amp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AMP&quot;</span><span class="p">)</span>
</span><span id="Parser-2739"><a href="#Parser-2739"><span class="linenos">2739</span></a>
-</span><span id="Parser-2740"><a href="#Parser-2740"><span class="linenos">2740</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2741"><a href="#Parser-2741"><span class="linenos">2741</span></a>
-</span><span id="Parser-2742"><a href="#Parser-2742"><span class="linenos">2742</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-2743"><a href="#Parser-2743"><span class="linenos">2743</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_opclass</span><span class="p">))</span>
-</span><span id="Parser-2744"><a href="#Parser-2744"><span class="linenos">2744</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2745"><a href="#Parser-2745"><span class="linenos">2745</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2746"><a href="#Parser-2746"><span class="linenos">2746</span></a>
-</span><span id="Parser-2747"><a href="#Parser-2747"><span class="linenos">2747</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCLUDE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2748"><a href="#Parser-2748"><span class="linenos">2748</span></a>
-</span><span id="Parser-2749"><a href="#Parser-2749"><span class="linenos">2749</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2750"><a href="#Parser-2750"><span class="linenos">2750</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
-</span><span id="Parser-2751"><a href="#Parser-2751"><span class="linenos">2751</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
-</span><span id="Parser-2752"><a href="#Parser-2752"><span class="linenos">2752</span></a> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
-</span><span id="Parser-2753"><a href="#Parser-2753"><span class="linenos">2753</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
-</span><span id="Parser-2754"><a href="#Parser-2754"><span class="linenos">2754</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
-</span><span id="Parser-2755"><a href="#Parser-2755"><span class="linenos">2755</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
-</span><span id="Parser-2756"><a href="#Parser-2756"><span class="linenos">2756</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
-</span><span id="Parser-2757"><a href="#Parser-2757"><span class="linenos">2757</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
-</span><span id="Parser-2758"><a href="#Parser-2758"><span class="linenos">2758</span></a> <span class="n">include</span><span class="o">=</span><span class="n">include</span><span class="p">,</span>
-</span><span id="Parser-2759"><a href="#Parser-2759"><span class="linenos">2759</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span>
-</span><span id="Parser-2760"><a href="#Parser-2760"><span class="linenos">2760</span></a> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
-</span><span id="Parser-2761"><a href="#Parser-2761"><span class="linenos">2761</span></a> <span class="p">)</span>
-</span><span id="Parser-2762"><a href="#Parser-2762"><span class="linenos">2762</span></a>
-</span><span id="Parser-2763"><a href="#Parser-2763"><span class="linenos">2763</span></a> <span class="k">def</span> <span class="nf">_parse_table_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Parser-2764"><a href="#Parser-2764"><span class="linenos">2764</span></a> <span class="n">hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-2765"><a href="#Parser-2765"><span class="linenos">2765</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-2766"><a href="#Parser-2766"><span class="linenos">2766</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
-</span><span id="Parser-2767"><a href="#Parser-2767"><span class="linenos">2767</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-2768"><a href="#Parser-2768"><span class="linenos">2768</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2769"><a href="#Parser-2769"><span class="linenos">2769</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">,</span>
-</span><span id="Parser-2770"><a href="#Parser-2770"><span class="linenos">2770</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="Parser-2771"><a href="#Parser-2771"><span class="linenos">2771</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2772"><a href="#Parser-2772"><span class="linenos">2772</span></a> <span class="p">),</span>
-</span><span id="Parser-2773"><a href="#Parser-2773"><span class="linenos">2773</span></a> <span class="p">)</span>
-</span><span id="Parser-2774"><a href="#Parser-2774"><span class="linenos">2774</span></a> <span class="p">)</span>
-</span><span id="Parser-2775"><a href="#Parser-2775"><span class="linenos">2775</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-2776"><a href="#Parser-2776"><span class="linenos">2776</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2777"><a href="#Parser-2777"><span class="linenos">2777</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
-</span><span id="Parser-2778"><a href="#Parser-2778"><span class="linenos">2778</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span><span class="p">):</span>
-</span><span id="Parser-2779"><a href="#Parser-2779"><span class="linenos">2779</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Parser-2780"><a href="#Parser-2780"><span class="linenos">2780</span></a>
-</span><span id="Parser-2781"><a href="#Parser-2781"><span class="linenos">2781</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">))</span>
-</span><span id="Parser-2782"><a href="#Parser-2782"><span class="linenos">2782</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
-</span><span id="Parser-2783"><a href="#Parser-2783"><span class="linenos">2783</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Parser-2784"><a href="#Parser-2784"><span class="linenos">2784</span></a>
-</span><span id="Parser-2785"><a href="#Parser-2785"><span class="linenos">2785</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">())</span>
-</span><span id="Parser-2786"><a href="#Parser-2786"><span class="linenos">2786</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
-</span><span id="Parser-2787"><a href="#Parser-2787"><span class="linenos">2787</span></a>
-</span><span id="Parser-2788"><a href="#Parser-2788"><span class="linenos">2788</span></a> <span class="k">return</span> <span class="n">hints</span> <span class="ow">or</span> <span class="kc">None</span>
-</span><span id="Parser-2789"><a href="#Parser-2789"><span class="linenos">2789</span></a>
-</span><span id="Parser-2790"><a href="#Parser-2790"><span class="linenos">2790</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2791"><a href="#Parser-2791"><span class="linenos">2791</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Parser-2792"><a href="#Parser-2792"><span class="linenos">2792</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">schema</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">optional_parens</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="Parser-2793"><a href="#Parser-2793"><span class="linenos">2793</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-2794"><a href="#Parser-2794"><span class="linenos">2794</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
-</span><span id="Parser-2795"><a href="#Parser-2795"><span class="linenos">2795</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="Parser-2796"><a href="#Parser-2796"><span class="linenos">2796</span></a> <span class="p">)</span>
-</span><span id="Parser-2797"><a href="#Parser-2797"><span class="linenos">2797</span></a>
-</span><span id="Parser-2798"><a href="#Parser-2798"><span class="linenos">2798</span></a> <span class="k">def</span> <span class="nf">_parse_table_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span>
-</span><span id="Parser-2799"><a href="#Parser-2799"><span class="linenos">2799</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2800"><a href="#Parser-2800"><span class="linenos">2800</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2801"><a href="#Parser-2801"><span class="linenos">2801</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="Parser-2802"><a href="#Parser-2802"><span class="linenos">2802</span></a>
-</span><span id="Parser-2803"><a href="#Parser-2803"><span class="linenos">2803</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
-</span><span id="Parser-2804"><a href="#Parser-2804"><span class="linenos">2804</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
-</span><span id="Parser-2805"><a href="#Parser-2805"><span class="linenos">2805</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
-</span><span id="Parser-2806"><a href="#Parser-2806"><span class="linenos">2806</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2807"><a href="#Parser-2807"><span class="linenos">2807</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
-</span><span id="Parser-2808"><a href="#Parser-2808"><span class="linenos">2808</span></a> <span class="p">)</span>
-</span><span id="Parser-2809"><a href="#Parser-2809"><span class="linenos">2809</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2810"><a href="#Parser-2810"><span class="linenos">2810</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
-</span><span id="Parser-2811"><a href="#Parser-2811"><span class="linenos">2811</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="Parser-2812"><a href="#Parser-2812"><span class="linenos">2812</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Parser-2813"><a href="#Parser-2813"><span class="linenos">2813</span></a>
-</span><span id="Parser-2814"><a href="#Parser-2814"><span class="linenos">2814</span></a> <span class="k">if</span> <span class="n">is_db_reference</span><span class="p">:</span>
-</span><span id="Parser-2815"><a href="#Parser-2815"><span class="linenos">2815</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
-</span><span id="Parser-2816"><a href="#Parser-2816"><span class="linenos">2816</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
-</span><span id="Parser-2817"><a href="#Parser-2817"><span class="linenos">2817</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2818"><a href="#Parser-2818"><span class="linenos">2818</span></a>
-</span><span id="Parser-2819"><a href="#Parser-2819"><span class="linenos">2819</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">is_db_reference</span><span class="p">:</span>
-</span><span id="Parser-2820"><a href="#Parser-2820"><span class="linenos">2820</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected table name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Parser-2821"><a href="#Parser-2821"><span class="linenos">2821</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">db</span> <span class="ow">and</span> <span class="n">is_db_reference</span><span class="p">:</span>
-</span><span id="Parser-2822"><a href="#Parser-2822"><span class="linenos">2822</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected database name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Parser-2823"><a href="#Parser-2823"><span class="linenos">2823</span></a>
-</span><span id="Parser-2824"><a href="#Parser-2824"><span class="linenos">2824</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2825"><a href="#Parser-2825"><span class="linenos">2825</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span> <span class="n">catalog</span><span class="o">=</span><span class="n">catalog</span><span class="p">,</span> <span class="n">pivots</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">()</span>
-</span><span id="Parser-2826"><a href="#Parser-2826"><span class="linenos">2826</span></a> <span class="p">)</span>
-</span><span id="Parser-2827"><a href="#Parser-2827"><span class="linenos">2827</span></a>
-</span><span id="Parser-2828"><a href="#Parser-2828"><span class="linenos">2828</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
-</span><span id="Parser-2829"><a href="#Parser-2829"><span class="linenos">2829</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-2830"><a href="#Parser-2830"><span class="linenos">2830</span></a> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-2831"><a href="#Parser-2831"><span class="linenos">2831</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-2832"><a href="#Parser-2832"><span class="linenos">2832</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-2833"><a href="#Parser-2833"><span class="linenos">2833</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-2834"><a href="#Parser-2834"><span class="linenos">2834</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-2835"><a href="#Parser-2835"><span class="linenos">2835</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-2836"><a href="#Parser-2836"><span class="linenos">2836</span></a> <span class="n">lateral</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">()</span>
-</span><span id="Parser-2837"><a href="#Parser-2837"><span class="linenos">2837</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
-</span><span id="Parser-2838"><a href="#Parser-2838"><span class="linenos">2838</span></a> <span class="k">return</span> <span class="n">lateral</span>
-</span><span id="Parser-2839"><a href="#Parser-2839"><span class="linenos">2839</span></a>
-</span><span id="Parser-2840"><a href="#Parser-2840"><span class="linenos">2840</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
-</span><span id="Parser-2841"><a href="#Parser-2841"><span class="linenos">2841</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="Parser-2842"><a href="#Parser-2842"><span class="linenos">2842</span></a> <span class="k">return</span> <span class="n">unnest</span>
-</span><span id="Parser-2843"><a href="#Parser-2843"><span class="linenos">2843</span></a>
-</span><span id="Parser-2844"><a href="#Parser-2844"><span class="linenos">2844</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">()</span>
-</span><span id="Parser-2845"><a href="#Parser-2845"><span class="linenos">2845</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="Parser-2846"><a href="#Parser-2846"><span class="linenos">2846</span></a> <span class="k">return</span> <span class="n">values</span>
-</span><span id="Parser-2847"><a href="#Parser-2847"><span class="linenos">2847</span></a>
-</span><span id="Parser-2848"><a href="#Parser-2848"><span class="linenos">2848</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2849"><a href="#Parser-2849"><span class="linenos">2849</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
-</span><span id="Parser-2850"><a href="#Parser-2850"><span class="linenos">2850</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">subquery</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">):</span>
-</span><span id="Parser-2851"><a href="#Parser-2851"><span class="linenos">2851</span></a> <span class="n">subquery</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
-</span><span id="Parser-2852"><a href="#Parser-2852"><span class="linenos">2852</span></a> <span class="k">return</span> <span class="n">subquery</span>
+</span><span id="Parser-2740"><a href="#Parser-2740"><span class="linenos">2740</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INDEX</span><span class="p">):</span>
+</span><span id="Parser-2741"><a href="#Parser-2741"><span class="linenos">2741</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2742"><a href="#Parser-2742"><span class="linenos">2742</span></a>
+</span><span id="Parser-2743"><a href="#Parser-2743"><span class="linenos">2743</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-2744"><a href="#Parser-2744"><span class="linenos">2744</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2745"><a href="#Parser-2745"><span class="linenos">2745</span></a>
+</span><span id="Parser-2746"><a href="#Parser-2746"><span class="linenos">2746</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2747"><a href="#Parser-2747"><span class="linenos">2747</span></a>
+</span><span id="Parser-2748"><a href="#Parser-2748"><span class="linenos">2748</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-2749"><a href="#Parser-2749"><span class="linenos">2749</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_opclass</span><span class="p">))</span>
+</span><span id="Parser-2750"><a href="#Parser-2750"><span class="linenos">2750</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2751"><a href="#Parser-2751"><span class="linenos">2751</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2752"><a href="#Parser-2752"><span class="linenos">2752</span></a>
+</span><span id="Parser-2753"><a href="#Parser-2753"><span class="linenos">2753</span></a> <span class="n">include</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCLUDE&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2754"><a href="#Parser-2754"><span class="linenos">2754</span></a>
+</span><span id="Parser-2755"><a href="#Parser-2755"><span class="linenos">2755</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2756"><a href="#Parser-2756"><span class="linenos">2756</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Index</span><span class="p">,</span>
+</span><span id="Parser-2757"><a href="#Parser-2757"><span class="linenos">2757</span></a> <span class="n">this</span><span class="o">=</span><span class="n">index</span><span class="p">,</span>
+</span><span id="Parser-2758"><a href="#Parser-2758"><span class="linenos">2758</span></a> <span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span>
+</span><span id="Parser-2759"><a href="#Parser-2759"><span class="linenos">2759</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
+</span><span id="Parser-2760"><a href="#Parser-2760"><span class="linenos">2760</span></a> <span class="n">columns</span><span class="o">=</span><span class="n">columns</span><span class="p">,</span>
+</span><span id="Parser-2761"><a href="#Parser-2761"><span class="linenos">2761</span></a> <span class="n">unique</span><span class="o">=</span><span class="n">unique</span><span class="p">,</span>
+</span><span id="Parser-2762"><a href="#Parser-2762"><span class="linenos">2762</span></a> <span class="n">primary</span><span class="o">=</span><span class="n">primary</span><span class="p">,</span>
+</span><span id="Parser-2763"><a href="#Parser-2763"><span class="linenos">2763</span></a> <span class="n">amp</span><span class="o">=</span><span class="n">amp</span><span class="p">,</span>
+</span><span id="Parser-2764"><a href="#Parser-2764"><span class="linenos">2764</span></a> <span class="n">include</span><span class="o">=</span><span class="n">include</span><span class="p">,</span>
+</span><span id="Parser-2765"><a href="#Parser-2765"><span class="linenos">2765</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span>
+</span><span id="Parser-2766"><a href="#Parser-2766"><span class="linenos">2766</span></a> <span class="n">where</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(),</span>
+</span><span id="Parser-2767"><a href="#Parser-2767"><span class="linenos">2767</span></a> <span class="p">)</span>
+</span><span id="Parser-2768"><a href="#Parser-2768"><span class="linenos">2768</span></a>
+</span><span id="Parser-2769"><a href="#Parser-2769"><span class="linenos">2769</span></a> <span class="k">def</span> <span class="nf">_parse_table_hints</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-2770"><a href="#Parser-2770"><span class="linenos">2770</span></a> <span class="n">hints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-2771"><a href="#Parser-2771"><span class="linenos">2771</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-2772"><a href="#Parser-2772"><span class="linenos">2772</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/queries/hints-transact-sql-table?view=sql-server-ver16</span>
+</span><span id="Parser-2773"><a href="#Parser-2773"><span class="linenos">2773</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-2774"><a href="#Parser-2774"><span class="linenos">2774</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2775"><a href="#Parser-2775"><span class="linenos">2775</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithTableHint</span><span class="p">,</span>
+</span><span id="Parser-2776"><a href="#Parser-2776"><span class="linenos">2776</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="Parser-2777"><a href="#Parser-2777"><span class="linenos">2777</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2778"><a href="#Parser-2778"><span class="linenos">2778</span></a> <span class="p">),</span>
+</span><span id="Parser-2779"><a href="#Parser-2779"><span class="linenos">2779</span></a> <span class="p">)</span>
+</span><span id="Parser-2780"><a href="#Parser-2780"><span class="linenos">2780</span></a> <span class="p">)</span>
+</span><span id="Parser-2781"><a href="#Parser-2781"><span class="linenos">2781</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-2782"><a href="#Parser-2782"><span class="linenos">2782</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2783"><a href="#Parser-2783"><span class="linenos">2783</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/index-hints.html</span>
+</span><span id="Parser-2784"><a href="#Parser-2784"><span class="linenos">2784</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TABLE_INDEX_HINT_TOKENS</span><span class="p">):</span>
+</span><span id="Parser-2785"><a href="#Parser-2785"><span class="linenos">2785</span></a> <span class="n">hint</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">IndexTableHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="Parser-2786"><a href="#Parser-2786"><span class="linenos">2786</span></a>
+</span><span id="Parser-2787"><a href="#Parser-2787"><span class="linenos">2787</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;INDEX&quot;</span><span class="p">,</span> <span class="s2">&quot;KEY&quot;</span><span class="p">))</span>
+</span><span id="Parser-2788"><a href="#Parser-2788"><span class="linenos">2788</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
+</span><span id="Parser-2789"><a href="#Parser-2789"><span class="linenos">2789</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;target&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="Parser-2790"><a href="#Parser-2790"><span class="linenos">2790</span></a>
+</span><span id="Parser-2791"><a href="#Parser-2791"><span class="linenos">2791</span></a> <span class="n">hint</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">())</span>
+</span><span id="Parser-2792"><a href="#Parser-2792"><span class="linenos">2792</span></a> <span class="n">hints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hint</span><span class="p">)</span>
+</span><span id="Parser-2793"><a href="#Parser-2793"><span class="linenos">2793</span></a>
+</span><span id="Parser-2794"><a href="#Parser-2794"><span class="linenos">2794</span></a> <span class="k">return</span> <span class="n">hints</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="Parser-2795"><a href="#Parser-2795"><span class="linenos">2795</span></a>
+</span><span id="Parser-2796"><a href="#Parser-2796"><span class="linenos">2796</span></a> <span class="k">def</span> <span class="nf">_parse_table_part</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2797"><a href="#Parser-2797"><span class="linenos">2797</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Parser-2798"><a href="#Parser-2798"><span class="linenos">2798</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">schema</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">optional_parens</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="Parser-2799"><a href="#Parser-2799"><span class="linenos">2799</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-2800"><a href="#Parser-2800"><span class="linenos">2800</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
+</span><span id="Parser-2801"><a href="#Parser-2801"><span class="linenos">2801</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-2802"><a href="#Parser-2802"><span class="linenos">2802</span></a> <span class="p">)</span>
+</span><span id="Parser-2803"><a href="#Parser-2803"><span class="linenos">2803</span></a>
+</span><span id="Parser-2804"><a href="#Parser-2804"><span class="linenos">2804</span></a> <span class="k">def</span> <span class="nf">_parse_table_parts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">:</span>
+</span><span id="Parser-2805"><a href="#Parser-2805"><span class="linenos">2805</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2806"><a href="#Parser-2806"><span class="linenos">2806</span></a> <span class="n">db</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2807"><a href="#Parser-2807"><span class="linenos">2807</span></a> <span class="n">table</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span> <span class="o">|</span> <span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="Parser-2808"><a href="#Parser-2808"><span class="linenos">2808</span></a>
+</span><span id="Parser-2809"><a href="#Parser-2809"><span class="linenos">2809</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
+</span><span id="Parser-2810"><a href="#Parser-2810"><span class="linenos">2810</span></a> <span class="k">if</span> <span class="n">catalog</span><span class="p">:</span>
+</span><span id="Parser-2811"><a href="#Parser-2811"><span class="linenos">2811</span></a> <span class="c1"># This allows nesting the table in arbitrarily many dot expressions if needed</span>
+</span><span id="Parser-2812"><a href="#Parser-2812"><span class="linenos">2812</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2813"><a href="#Parser-2813"><span class="linenos">2813</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
+</span><span id="Parser-2814"><a href="#Parser-2814"><span class="linenos">2814</span></a> <span class="p">)</span>
+</span><span id="Parser-2815"><a href="#Parser-2815"><span class="linenos">2815</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2816"><a href="#Parser-2816"><span class="linenos">2816</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
+</span><span id="Parser-2817"><a href="#Parser-2817"><span class="linenos">2817</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="Parser-2818"><a href="#Parser-2818"><span class="linenos">2818</span></a> <span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_part</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Parser-2819"><a href="#Parser-2819"><span class="linenos">2819</span></a>
+</span><span id="Parser-2820"><a href="#Parser-2820"><span class="linenos">2820</span></a> <span class="k">if</span> <span class="n">is_db_reference</span><span class="p">:</span>
+</span><span id="Parser-2821"><a href="#Parser-2821"><span class="linenos">2821</span></a> <span class="n">catalog</span> <span class="o">=</span> <span class="n">db</span>
+</span><span id="Parser-2822"><a href="#Parser-2822"><span class="linenos">2822</span></a> <span class="n">db</span> <span class="o">=</span> <span class="n">table</span>
+</span><span id="Parser-2823"><a href="#Parser-2823"><span class="linenos">2823</span></a> <span class="n">table</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2824"><a href="#Parser-2824"><span class="linenos">2824</span></a>
+</span><span id="Parser-2825"><a href="#Parser-2825"><span class="linenos">2825</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">table</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">is_db_reference</span><span class="p">:</span>
+</span><span id="Parser-2826"><a href="#Parser-2826"><span class="linenos">2826</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected table name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Parser-2827"><a href="#Parser-2827"><span class="linenos">2827</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">db</span> <span class="ow">and</span> <span class="n">is_db_reference</span><span class="p">:</span>
+</span><span id="Parser-2828"><a href="#Parser-2828"><span class="linenos">2828</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Expected database name but got </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Parser-2829"><a href="#Parser-2829"><span class="linenos">2829</span></a>
+</span><span id="Parser-2830"><a href="#Parser-2830"><span class="linenos">2830</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2831"><a href="#Parser-2831"><span class="linenos">2831</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">db</span><span class="o">=</span><span class="n">db</span><span class="p">,</span> <span class="n">catalog</span><span class="o">=</span><span class="n">catalog</span><span class="p">,</span> <span class="n">pivots</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">()</span>
+</span><span id="Parser-2832"><a href="#Parser-2832"><span class="linenos">2832</span></a> <span class="p">)</span>
+</span><span id="Parser-2833"><a href="#Parser-2833"><span class="linenos">2833</span></a>
+</span><span id="Parser-2834"><a href="#Parser-2834"><span class="linenos">2834</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
+</span><span id="Parser-2835"><a href="#Parser-2835"><span class="linenos">2835</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-2836"><a href="#Parser-2836"><span class="linenos">2836</span></a> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-2837"><a href="#Parser-2837"><span class="linenos">2837</span></a> <span class="n">joins</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-2838"><a href="#Parser-2838"><span class="linenos">2838</span></a> <span class="n">alias_tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-2839"><a href="#Parser-2839"><span class="linenos">2839</span></a> <span class="n">parse_bracket</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-2840"><a href="#Parser-2840"><span class="linenos">2840</span></a> <span class="n">is_db_reference</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-2841"><a href="#Parser-2841"><span class="linenos">2841</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-2842"><a href="#Parser-2842"><span class="linenos">2842</span></a> <span class="n">lateral</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lateral</span><span class="p">()</span>
+</span><span id="Parser-2843"><a href="#Parser-2843"><span class="linenos">2843</span></a> <span class="k">if</span> <span class="n">lateral</span><span class="p">:</span>
+</span><span id="Parser-2844"><a href="#Parser-2844"><span class="linenos">2844</span></a> <span class="k">return</span> <span class="n">lateral</span>
+</span><span id="Parser-2845"><a href="#Parser-2845"><span class="linenos">2845</span></a>
+</span><span id="Parser-2846"><a href="#Parser-2846"><span class="linenos">2846</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">()</span>
+</span><span id="Parser-2847"><a href="#Parser-2847"><span class="linenos">2847</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="Parser-2848"><a href="#Parser-2848"><span class="linenos">2848</span></a> <span class="k">return</span> <span class="n">unnest</span>
+</span><span id="Parser-2849"><a href="#Parser-2849"><span class="linenos">2849</span></a>
+</span><span id="Parser-2850"><a href="#Parser-2850"><span class="linenos">2850</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_derived_table_values</span><span class="p">()</span>
+</span><span id="Parser-2851"><a href="#Parser-2851"><span class="linenos">2851</span></a> <span class="k">if</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="Parser-2852"><a href="#Parser-2852"><span class="linenos">2852</span></a> <span class="k">return</span> <span class="n">values</span>
</span><span id="Parser-2853"><a href="#Parser-2853"><span class="linenos">2853</span></a>
-</span><span id="Parser-2854"><a href="#Parser-2854"><span class="linenos">2854</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="n">parse_bracket</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="Parser-2855"><a href="#Parser-2855"><span class="linenos">2855</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">bracket</span><span class="p">)</span> <span class="k">if</span> <span class="n">bracket</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2856"><a href="#Parser-2856"><span class="linenos">2856</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
-</span><span id="Parser-2857"><a href="#Parser-2857"><span class="linenos">2857</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
-</span><span id="Parser-2858"><a href="#Parser-2858"><span class="linenos">2858</span></a> <span class="n">bracket</span>
-</span><span id="Parser-2859"><a href="#Parser-2859"><span class="linenos">2859</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span>
-</span><span id="Parser-2860"><a href="#Parser-2860"><span class="linenos">2860</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">)</span>
-</span><span id="Parser-2861"><a href="#Parser-2861"><span class="linenos">2861</span></a> <span class="p">),</span>
-</span><span id="Parser-2862"><a href="#Parser-2862"><span class="linenos">2862</span></a> <span class="p">)</span>
-</span><span id="Parser-2863"><a href="#Parser-2863"><span class="linenos">2863</span></a>
-</span><span id="Parser-2864"><a href="#Parser-2864"><span class="linenos">2864</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
-</span><span id="Parser-2865"><a href="#Parser-2865"><span class="linenos">2865</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-2866"><a href="#Parser-2866"><span class="linenos">2866</span></a>
-</span><span id="Parser-2867"><a href="#Parser-2867"><span class="linenos">2867</span></a> <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_version</span><span class="p">()</span>
-</span><span id="Parser-2868"><a href="#Parser-2868"><span class="linenos">2868</span></a>
-</span><span id="Parser-2869"><a href="#Parser-2869"><span class="linenos">2869</span></a> <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
-</span><span id="Parser-2870"><a href="#Parser-2870"><span class="linenos">2870</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span>
-</span><span id="Parser-2871"><a href="#Parser-2871"><span class="linenos">2871</span></a>
-</span><span id="Parser-2872"><a href="#Parser-2872"><span class="linenos">2872</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
-</span><span id="Parser-2873"><a href="#Parser-2873"><span class="linenos">2873</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="Parser-2854"><a href="#Parser-2854"><span class="linenos">2854</span></a> <span class="n">subquery</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2855"><a href="#Parser-2855"><span class="linenos">2855</span></a> <span class="k">if</span> <span class="n">subquery</span><span class="p">:</span>
+</span><span id="Parser-2856"><a href="#Parser-2856"><span class="linenos">2856</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">subquery</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">):</span>
+</span><span id="Parser-2857"><a href="#Parser-2857"><span class="linenos">2857</span></a> <span class="n">subquery</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
+</span><span id="Parser-2858"><a href="#Parser-2858"><span class="linenos">2858</span></a> <span class="k">return</span> <span class="n">subquery</span>
+</span><span id="Parser-2859"><a href="#Parser-2859"><span class="linenos">2859</span></a>
+</span><span id="Parser-2860"><a href="#Parser-2860"><span class="linenos">2860</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="n">parse_bracket</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="Parser-2861"><a href="#Parser-2861"><span class="linenos">2861</span></a> <span class="n">bracket</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Table</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">bracket</span><span class="p">)</span> <span class="k">if</span> <span class="n">bracket</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2862"><a href="#Parser-2862"><span class="linenos">2862</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="Parser-2863"><a href="#Parser-2863"><span class="linenos">2863</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">,</span>
+</span><span id="Parser-2864"><a href="#Parser-2864"><span class="linenos">2864</span></a> <span class="n">bracket</span>
+</span><span id="Parser-2865"><a href="#Parser-2865"><span class="linenos">2865</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span>
+</span><span id="Parser-2866"><a href="#Parser-2866"><span class="linenos">2866</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">is_db_reference</span><span class="o">=</span><span class="n">is_db_reference</span><span class="p">)</span>
+</span><span id="Parser-2867"><a href="#Parser-2867"><span class="linenos">2867</span></a> <span class="p">),</span>
+</span><span id="Parser-2868"><a href="#Parser-2868"><span class="linenos">2868</span></a> <span class="p">)</span>
+</span><span id="Parser-2869"><a href="#Parser-2869"><span class="linenos">2869</span></a>
+</span><span id="Parser-2870"><a href="#Parser-2870"><span class="linenos">2870</span></a> <span class="k">if</span> <span class="n">schema</span><span class="p">:</span>
+</span><span id="Parser-2871"><a href="#Parser-2871"><span class="linenos">2871</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-2872"><a href="#Parser-2872"><span class="linenos">2872</span></a>
+</span><span id="Parser-2873"><a href="#Parser-2873"><span class="linenos">2873</span></a> <span class="n">version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_version</span><span class="p">()</span>
</span><span id="Parser-2874"><a href="#Parser-2874"><span class="linenos">2874</span></a>
-</span><span id="Parser-2875"><a href="#Parser-2875"><span class="linenos">2875</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(</span><span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">)</span>
-</span><span id="Parser-2876"><a href="#Parser-2876"><span class="linenos">2876</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-2877"><a href="#Parser-2877"><span class="linenos">2877</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="n">alias</span><span class="p">)</span>
-</span><span id="Parser-2878"><a href="#Parser-2878"><span class="linenos">2878</span></a>
-</span><span id="Parser-2879"><a href="#Parser-2879"><span class="linenos">2879</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">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">):</span>
-</span><span id="Parser-2880"><a href="#Parser-2880"><span class="linenos">2880</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2881"><a href="#Parser-2881"><span class="linenos">2881</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtIndex</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">to_column</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-2882"><a href="#Parser-2882"><span class="linenos">2882</span></a> <span class="p">)</span>
-</span><span id="Parser-2883"><a href="#Parser-2883"><span class="linenos">2883</span></a>
-</span><span id="Parser-2884"><a href="#Parser-2884"><span class="linenos">2884</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_hints</span><span class="p">())</span>
-</span><span id="Parser-2885"><a href="#Parser-2885"><span class="linenos">2885</span></a>
-</span><span id="Parser-2886"><a href="#Parser-2886"><span class="linenos">2886</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">):</span>
-</span><span id="Parser-2887"><a href="#Parser-2887"><span class="linenos">2887</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
-</span><span id="Parser-2888"><a href="#Parser-2888"><span class="linenos">2888</span></a>
-</span><span id="Parser-2889"><a href="#Parser-2889"><span class="linenos">2889</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
-</span><span id="Parser-2890"><a href="#Parser-2890"><span class="linenos">2890</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="Parser-2875"><a href="#Parser-2875"><span class="linenos">2875</span></a> <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
+</span><span id="Parser-2876"><a href="#Parser-2876"><span class="linenos">2876</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span>
+</span><span id="Parser-2877"><a href="#Parser-2877"><span class="linenos">2877</span></a>
+</span><span id="Parser-2878"><a href="#Parser-2878"><span class="linenos">2878</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
+</span><span id="Parser-2879"><a href="#Parser-2879"><span class="linenos">2879</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="Parser-2880"><a href="#Parser-2880"><span class="linenos">2880</span></a>
+</span><span id="Parser-2881"><a href="#Parser-2881"><span class="linenos">2881</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">(</span><span class="n">alias_tokens</span><span class="o">=</span><span class="n">alias_tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLE_ALIAS_TOKENS</span><span class="p">)</span>
+</span><span id="Parser-2882"><a href="#Parser-2882"><span class="linenos">2882</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-2883"><a href="#Parser-2883"><span class="linenos">2883</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="n">alias</span><span class="p">)</span>
+</span><span id="Parser-2884"><a href="#Parser-2884"><span class="linenos">2884</span></a>
+</span><span id="Parser-2885"><a href="#Parser-2885"><span class="linenos">2885</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">Table</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">):</span>
+</span><span id="Parser-2886"><a href="#Parser-2886"><span class="linenos">2886</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2887"><a href="#Parser-2887"><span class="linenos">2887</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtIndex</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">to_column</span><span class="p">(</span><span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-2888"><a href="#Parser-2888"><span class="linenos">2888</span></a> <span class="p">)</span>
+</span><span id="Parser-2889"><a href="#Parser-2889"><span class="linenos">2889</span></a>
+</span><span id="Parser-2890"><a href="#Parser-2890"><span class="linenos">2890</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;hints&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_hints</span><span class="p">())</span>
</span><span id="Parser-2891"><a href="#Parser-2891"><span class="linenos">2891</span></a>
-</span><span id="Parser-2892"><a href="#Parser-2892"><span class="linenos">2892</span></a> <span class="k">if</span> <span class="n">table_sample</span><span class="p">:</span>
-</span><span id="Parser-2893"><a href="#Parser-2893"><span class="linenos">2893</span></a> <span class="n">table_sample</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-2894"><a href="#Parser-2894"><span class="linenos">2894</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</span>
-</span><span id="Parser-2895"><a href="#Parser-2895"><span class="linenos">2895</span></a>
-</span><span id="Parser-2896"><a href="#Parser-2896"><span class="linenos">2896</span></a> <span class="k">if</span> <span class="n">joins</span><span class="p">:</span>
-</span><span id="Parser-2897"><a href="#Parser-2897"><span class="linenos">2897</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
-</span><span id="Parser-2898"><a href="#Parser-2898"><span class="linenos">2898</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">join</span><span class="p">)</span>
-</span><span id="Parser-2899"><a href="#Parser-2899"><span class="linenos">2899</span></a>
-</span><span id="Parser-2900"><a href="#Parser-2900"><span class="linenos">2900</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">):</span>
-</span><span id="Parser-2901"><a href="#Parser-2901"><span class="linenos">2901</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;ordinality&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2902"><a href="#Parser-2902"><span class="linenos">2902</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
-</span><span id="Parser-2903"><a href="#Parser-2903"><span class="linenos">2903</span></a>
-</span><span id="Parser-2904"><a href="#Parser-2904"><span class="linenos">2904</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2892"><a href="#Parser-2892"><span class="linenos">2892</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">):</span>
+</span><span id="Parser-2893"><a href="#Parser-2893"><span class="linenos">2893</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;pivots&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivots</span><span class="p">())</span>
+</span><span id="Parser-2894"><a href="#Parser-2894"><span class="linenos">2894</span></a>
+</span><span id="Parser-2895"><a href="#Parser-2895"><span class="linenos">2895</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">ALIAS_POST_TABLESAMPLE</span><span class="p">:</span>
+</span><span id="Parser-2896"><a href="#Parser-2896"><span class="linenos">2896</span></a> <span class="n">table_sample</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_sample</span><span class="p">()</span>
+</span><span id="Parser-2897"><a href="#Parser-2897"><span class="linenos">2897</span></a>
+</span><span id="Parser-2898"><a href="#Parser-2898"><span class="linenos">2898</span></a> <span class="k">if</span> <span class="n">table_sample</span><span class="p">:</span>
+</span><span id="Parser-2899"><a href="#Parser-2899"><span class="linenos">2899</span></a> <span class="n">table_sample</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-2900"><a href="#Parser-2900"><span class="linenos">2900</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">table_sample</span>
+</span><span id="Parser-2901"><a href="#Parser-2901"><span class="linenos">2901</span></a>
+</span><span id="Parser-2902"><a href="#Parser-2902"><span class="linenos">2902</span></a> <span class="k">if</span> <span class="n">joins</span><span class="p">:</span>
+</span><span id="Parser-2903"><a href="#Parser-2903"><span class="linenos">2903</span></a> <span class="k">for</span> <span class="n">join</span> <span class="ow">in</span> <span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
+</span><span id="Parser-2904"><a href="#Parser-2904"><span class="linenos">2904</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;joins&quot;</span><span class="p">,</span> <span class="n">join</span><span class="p">)</span>
</span><span id="Parser-2905"><a href="#Parser-2905"><span class="linenos">2905</span></a>
-</span><span id="Parser-2906"><a href="#Parser-2906"><span class="linenos">2906</span></a> <span class="k">def</span> <span class="nf">_parse_version</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">]:</span>
-</span><span id="Parser-2907"><a href="#Parser-2907"><span class="linenos">2907</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
-</span><span id="Parser-2908"><a href="#Parser-2908"><span class="linenos">2908</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;TIMESTAMP&quot;</span>
-</span><span id="Parser-2909"><a href="#Parser-2909"><span class="linenos">2909</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">):</span>
-</span><span id="Parser-2910"><a href="#Parser-2910"><span class="linenos">2910</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;VERSION&quot;</span>
-</span><span id="Parser-2911"><a href="#Parser-2911"><span class="linenos">2911</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2912"><a href="#Parser-2912"><span class="linenos">2912</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2913"><a href="#Parser-2913"><span class="linenos">2913</span></a>
-</span><span id="Parser-2914"><a href="#Parser-2914"><span class="linenos">2914</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
-</span><span id="Parser-2915"><a href="#Parser-2915"><span class="linenos">2915</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-2916"><a href="#Parser-2916"><span class="linenos">2916</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-2917"><a href="#Parser-2917"><span class="linenos">2917</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
-</span><span id="Parser-2918"><a href="#Parser-2918"><span class="linenos">2918</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-2919"><a href="#Parser-2919"><span class="linenos">2919</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2920"><a href="#Parser-2920"><span class="linenos">2920</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">]</span>
-</span><span id="Parser-2921"><a href="#Parser-2921"><span class="linenos">2921</span></a> <span class="p">)</span>
-</span><span id="Parser-2922"><a href="#Parser-2922"><span class="linenos">2922</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
-</span><span id="Parser-2923"><a href="#Parser-2923"><span class="linenos">2923</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;CONTAINED IN&quot;</span>
-</span><span id="Parser-2924"><a href="#Parser-2924"><span class="linenos">2924</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2925"><a href="#Parser-2925"><span class="linenos">2925</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
-</span><span id="Parser-2926"><a href="#Parser-2926"><span class="linenos">2926</span></a> <span class="p">)</span>
-</span><span id="Parser-2927"><a href="#Parser-2927"><span class="linenos">2927</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
-</span><span id="Parser-2928"><a href="#Parser-2928"><span class="linenos">2928</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ALL&quot;</span>
-</span><span id="Parser-2929"><a href="#Parser-2929"><span class="linenos">2929</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2930"><a href="#Parser-2930"><span class="linenos">2930</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-2931"><a href="#Parser-2931"><span class="linenos">2931</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
-</span><span id="Parser-2932"><a href="#Parser-2932"><span class="linenos">2932</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;AS OF&quot;</span>
-</span><span id="Parser-2933"><a href="#Parser-2933"><span class="linenos">2933</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="Parser-2934"><a href="#Parser-2934"><span class="linenos">2934</span></a>
-</span><span id="Parser-2935"><a href="#Parser-2935"><span class="linenos">2935</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="Parser-2936"><a href="#Parser-2936"><span class="linenos">2936</span></a>
-</span><span id="Parser-2937"><a href="#Parser-2937"><span class="linenos">2937</span></a> <span class="k">def</span> <span class="nf">_parse_unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">]:</span>
-</span><span id="Parser-2938"><a href="#Parser-2938"><span class="linenos">2938</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">):</span>
-</span><span id="Parser-2939"><a href="#Parser-2939"><span class="linenos">2939</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2906"><a href="#Parser-2906"><span class="linenos">2906</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">):</span>
+</span><span id="Parser-2907"><a href="#Parser-2907"><span class="linenos">2907</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;ordinality&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-2908"><a href="#Parser-2908"><span class="linenos">2908</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="Parser-2909"><a href="#Parser-2909"><span class="linenos">2909</span></a>
+</span><span id="Parser-2910"><a href="#Parser-2910"><span class="linenos">2910</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-2911"><a href="#Parser-2911"><span class="linenos">2911</span></a>
+</span><span id="Parser-2912"><a href="#Parser-2912"><span class="linenos">2912</span></a> <span class="k">def</span> <span class="nf">_parse_version</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">]:</span>
+</span><span id="Parser-2913"><a href="#Parser-2913"><span class="linenos">2913</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
+</span><span id="Parser-2914"><a href="#Parser-2914"><span class="linenos">2914</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;TIMESTAMP&quot;</span>
+</span><span id="Parser-2915"><a href="#Parser-2915"><span class="linenos">2915</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VERSION_SNAPSHOT</span><span class="p">):</span>
+</span><span id="Parser-2916"><a href="#Parser-2916"><span class="linenos">2916</span></a> <span class="n">this</span> <span class="o">=</span> <span class="s2">&quot;VERSION&quot;</span>
+</span><span id="Parser-2917"><a href="#Parser-2917"><span class="linenos">2917</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2918"><a href="#Parser-2918"><span class="linenos">2918</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2919"><a href="#Parser-2919"><span class="linenos">2919</span></a>
+</span><span id="Parser-2920"><a href="#Parser-2920"><span class="linenos">2920</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)):</span>
+</span><span id="Parser-2921"><a href="#Parser-2921"><span class="linenos">2921</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-2922"><a href="#Parser-2922"><span class="linenos">2922</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-2923"><a href="#Parser-2923"><span class="linenos">2923</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TO&quot;</span><span class="p">,</span> <span class="s2">&quot;AND&quot;</span><span class="p">))</span>
+</span><span id="Parser-2924"><a href="#Parser-2924"><span class="linenos">2924</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-2925"><a href="#Parser-2925"><span class="linenos">2925</span></a> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2926"><a href="#Parser-2926"><span class="linenos">2926</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">]</span>
+</span><span id="Parser-2927"><a href="#Parser-2927"><span class="linenos">2927</span></a> <span class="p">)</span>
+</span><span id="Parser-2928"><a href="#Parser-2928"><span class="linenos">2928</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CONTAINED&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">):</span>
+</span><span id="Parser-2929"><a href="#Parser-2929"><span class="linenos">2929</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;CONTAINED IN&quot;</span>
+</span><span id="Parser-2930"><a href="#Parser-2930"><span class="linenos">2930</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2931"><a href="#Parser-2931"><span class="linenos">2931</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="Parser-2932"><a href="#Parser-2932"><span class="linenos">2932</span></a> <span class="p">)</span>
+</span><span id="Parser-2933"><a href="#Parser-2933"><span class="linenos">2933</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
+</span><span id="Parser-2934"><a href="#Parser-2934"><span class="linenos">2934</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;ALL&quot;</span>
+</span><span id="Parser-2935"><a href="#Parser-2935"><span class="linenos">2935</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2936"><a href="#Parser-2936"><span class="linenos">2936</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-2937"><a href="#Parser-2937"><span class="linenos">2937</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AS&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
+</span><span id="Parser-2938"><a href="#Parser-2938"><span class="linenos">2938</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="s2">&quot;AS OF&quot;</span>
+</span><span id="Parser-2939"><a href="#Parser-2939"><span class="linenos">2939</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
</span><span id="Parser-2940"><a href="#Parser-2940"><span class="linenos">2940</span></a>
-</span><span id="Parser-2941"><a href="#Parser-2941"><span class="linenos">2941</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
-</span><span id="Parser-2942"><a href="#Parser-2942"><span class="linenos">2942</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">)</span>
-</span><span id="Parser-2943"><a href="#Parser-2943"><span class="linenos">2943</span></a>
-</span><span id="Parser-2944"><a href="#Parser-2944"><span class="linenos">2944</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">with_alias</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-2945"><a href="#Parser-2945"><span class="linenos">2945</span></a>
-</span><span id="Parser-2946"><a href="#Parser-2946"><span class="linenos">2946</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-2947"><a href="#Parser-2947"><span class="linenos">2947</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
-</span><span id="Parser-2948"><a href="#Parser-2948"><span class="linenos">2948</span></a> <span class="k">if</span> <span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">):</span>
-</span><span id="Parser-2949"><a href="#Parser-2949"><span class="linenos">2949</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unexpected extra column alias in unnest.&quot;</span><span class="p">)</span>
-</span><span id="Parser-2950"><a href="#Parser-2950"><span class="linenos">2950</span></a>
-</span><span id="Parser-2951"><a href="#Parser-2951"><span class="linenos">2951</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">])</span>
-</span><span id="Parser-2952"><a href="#Parser-2952"><span class="linenos">2952</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Parser-2953"><a href="#Parser-2953"><span class="linenos">2953</span></a>
-</span><span id="Parser-2954"><a href="#Parser-2954"><span class="linenos">2954</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
-</span><span id="Parser-2955"><a href="#Parser-2955"><span class="linenos">2955</span></a> <span class="k">if</span> <span class="n">offset</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">):</span>
-</span><span id="Parser-2956"><a href="#Parser-2956"><span class="linenos">2956</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">columns</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
-</span><span id="Parser-2957"><a href="#Parser-2957"><span class="linenos">2957</span></a>
-</span><span id="Parser-2958"><a href="#Parser-2958"><span class="linenos">2958</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">offset</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
-</span><span id="Parser-2959"><a href="#Parser-2959"><span class="linenos">2959</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
-</span><span id="Parser-2960"><a href="#Parser-2960"><span class="linenos">2960</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
-</span><span id="Parser-2961"><a href="#Parser-2961"><span class="linenos">2961</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_OFFSET_ALIAS_TOKENS</span>
-</span><span id="Parser-2962"><a href="#Parser-2962"><span class="linenos">2962</span></a> <span class="p">)</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">)</span>
+</span><span id="Parser-2941"><a href="#Parser-2941"><span class="linenos">2941</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Version</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="Parser-2942"><a href="#Parser-2942"><span class="linenos">2942</span></a>
+</span><span id="Parser-2943"><a href="#Parser-2943"><span class="linenos">2943</span></a> <span class="k">def</span> <span class="nf">_parse_unnest</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">with_alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">]:</span>
+</span><span id="Parser-2944"><a href="#Parser-2944"><span class="linenos">2944</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNNEST</span><span class="p">):</span>
+</span><span id="Parser-2945"><a href="#Parser-2945"><span class="linenos">2945</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2946"><a href="#Parser-2946"><span class="linenos">2946</span></a>
+</span><span id="Parser-2947"><a href="#Parser-2947"><span class="linenos">2947</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
+</span><span id="Parser-2948"><a href="#Parser-2948"><span class="linenos">2948</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ORDINALITY</span><span class="p">)</span>
+</span><span id="Parser-2949"><a href="#Parser-2949"><span class="linenos">2949</span></a>
+</span><span id="Parser-2950"><a href="#Parser-2950"><span class="linenos">2950</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span> <span class="k">if</span> <span class="n">with_alias</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-2951"><a href="#Parser-2951"><span class="linenos">2951</span></a>
+</span><span id="Parser-2952"><a href="#Parser-2952"><span class="linenos">2952</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-2953"><a href="#Parser-2953"><span class="linenos">2953</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">UNNEST_COLUMN_ONLY</span><span class="p">:</span>
+</span><span id="Parser-2954"><a href="#Parser-2954"><span class="linenos">2954</span></a> <span class="k">if</span> <span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">):</span>
+</span><span id="Parser-2955"><a href="#Parser-2955"><span class="linenos">2955</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unexpected extra column alias in unnest.&quot;</span><span class="p">)</span>
+</span><span id="Parser-2956"><a href="#Parser-2956"><span class="linenos">2956</span></a>
+</span><span id="Parser-2957"><a href="#Parser-2957"><span class="linenos">2957</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">alias</span><span class="o">.</span><span class="n">this</span><span class="p">])</span>
+</span><span id="Parser-2958"><a href="#Parser-2958"><span class="linenos">2958</span></a> <span class="n">alias</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Parser-2959"><a href="#Parser-2959"><span class="linenos">2959</span></a>
+</span><span id="Parser-2960"><a href="#Parser-2960"><span class="linenos">2960</span></a> <span class="n">columns</span> <span class="o">=</span> <span class="n">alias</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
+</span><span id="Parser-2961"><a href="#Parser-2961"><span class="linenos">2961</span></a> <span class="k">if</span> <span class="n">offset</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">columns</span><span class="p">):</span>
+</span><span id="Parser-2962"><a href="#Parser-2962"><span class="linenos">2962</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">columns</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
</span><span id="Parser-2963"><a href="#Parser-2963"><span class="linenos">2963</span></a>
-</span><span id="Parser-2964"><a href="#Parser-2964"><span class="linenos">2964</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
-</span><span id="Parser-2965"><a href="#Parser-2965"><span class="linenos">2965</span></a>
-</span><span id="Parser-2966"><a href="#Parser-2966"><span class="linenos">2966</span></a> <span class="k">def</span> <span class="nf">_parse_derived_table_values</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">]:</span>
-</span><span id="Parser-2967"><a href="#Parser-2967"><span class="linenos">2967</span></a> <span class="n">is_derived</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">)</span>
-</span><span id="Parser-2968"><a href="#Parser-2968"><span class="linenos">2968</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_derived</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">):</span>
-</span><span id="Parser-2969"><a href="#Parser-2969"><span class="linenos">2969</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-2970"><a href="#Parser-2970"><span class="linenos">2970</span></a>
-</span><span id="Parser-2971"><a href="#Parser-2971"><span class="linenos">2971</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">)</span>
-</span><span id="Parser-2972"><a href="#Parser-2972"><span class="linenos">2972</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
-</span><span id="Parser-2973"><a href="#Parser-2973"><span class="linenos">2973</span></a>
-</span><span id="Parser-2974"><a href="#Parser-2974"><span class="linenos">2974</span></a> <span class="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
-</span><span id="Parser-2975"><a href="#Parser-2975"><span class="linenos">2975</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-2964"><a href="#Parser-2964"><span class="linenos">2964</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">offset</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
+</span><span id="Parser-2965"><a href="#Parser-2965"><span class="linenos">2965</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
+</span><span id="Parser-2966"><a href="#Parser-2966"><span class="linenos">2966</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
+</span><span id="Parser-2967"><a href="#Parser-2967"><span class="linenos">2967</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">UNNEST_OFFSET_ALIAS_TOKENS</span>
+</span><span id="Parser-2968"><a href="#Parser-2968"><span class="linenos">2968</span></a> <span class="p">)</span> <span class="ow">or</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">&quot;offset&quot;</span><span class="p">)</span>
+</span><span id="Parser-2969"><a href="#Parser-2969"><span class="linenos">2969</span></a>
+</span><span id="Parser-2970"><a href="#Parser-2970"><span class="linenos">2970</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Unnest</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">)</span>
+</span><span id="Parser-2971"><a href="#Parser-2971"><span class="linenos">2971</span></a>
+</span><span id="Parser-2972"><a href="#Parser-2972"><span class="linenos">2972</span></a> <span class="k">def</span> <span class="nf">_parse_derived_table_values</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">]:</span>
+</span><span id="Parser-2973"><a href="#Parser-2973"><span class="linenos">2973</span></a> <span class="n">is_derived</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">)</span>
+</span><span id="Parser-2974"><a href="#Parser-2974"><span class="linenos">2974</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">is_derived</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">):</span>
+</span><span id="Parser-2975"><a href="#Parser-2975"><span class="linenos">2975</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-2976"><a href="#Parser-2976"><span class="linenos">2976</span></a>
-</span><span id="Parser-2977"><a href="#Parser-2977"><span class="linenos">2977</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-2978"><a href="#Parser-2978"><span class="linenos">2978</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
-</span><span id="Parser-2979"><a href="#Parser-2979"><span class="linenos">2979</span></a> <span class="p">)</span>
-</span><span id="Parser-2980"><a href="#Parser-2980"><span class="linenos">2980</span></a>
-</span><span id="Parser-2981"><a href="#Parser-2981"><span class="linenos">2981</span></a> <span class="k">def</span> <span class="nf">_parse_table_sample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">as_modifier</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">]:</span>
-</span><span id="Parser-2982"><a href="#Parser-2982"><span class="linenos">2982</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
-</span><span id="Parser-2983"><a href="#Parser-2983"><span class="linenos">2983</span></a> <span class="n">as_modifier</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;USING&quot;</span><span class="p">,</span> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">)</span>
-</span><span id="Parser-2984"><a href="#Parser-2984"><span class="linenos">2984</span></a> <span class="p">):</span>
-</span><span id="Parser-2985"><a href="#Parser-2985"><span class="linenos">2985</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2977"><a href="#Parser-2977"><span class="linenos">2977</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">)</span>
+</span><span id="Parser-2978"><a href="#Parser-2978"><span class="linenos">2978</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
+</span><span id="Parser-2979"><a href="#Parser-2979"><span class="linenos">2979</span></a>
+</span><span id="Parser-2980"><a href="#Parser-2980"><span class="linenos">2980</span></a> <span class="k">if</span> <span class="n">is_derived</span><span class="p">:</span>
+</span><span id="Parser-2981"><a href="#Parser-2981"><span class="linenos">2981</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-2982"><a href="#Parser-2982"><span class="linenos">2982</span></a>
+</span><span id="Parser-2983"><a href="#Parser-2983"><span class="linenos">2983</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-2984"><a href="#Parser-2984"><span class="linenos">2984</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">()</span>
+</span><span id="Parser-2985"><a href="#Parser-2985"><span class="linenos">2985</span></a> <span class="p">)</span>
</span><span id="Parser-2986"><a href="#Parser-2986"><span class="linenos">2986</span></a>
-</span><span id="Parser-2987"><a href="#Parser-2987"><span class="linenos">2987</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2988"><a href="#Parser-2988"><span class="linenos">2988</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2989"><a href="#Parser-2989"><span class="linenos">2989</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2990"><a href="#Parser-2990"><span class="linenos">2990</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2991"><a href="#Parser-2991"><span class="linenos">2991</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2992"><a href="#Parser-2992"><span class="linenos">2992</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2993"><a href="#Parser-2993"><span class="linenos">2993</span></a>
-</span><span id="Parser-2994"><a href="#Parser-2994"><span class="linenos">2994</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,),</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-2995"><a href="#Parser-2995"><span class="linenos">2995</span></a> <span class="n">matched_l_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
-</span><span id="Parser-2996"><a href="#Parser-2996"><span class="linenos">2996</span></a>
-</span><span id="Parser-2997"><a href="#Parser-2997"><span class="linenos">2997</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_CSV</span><span class="p">:</span>
-</span><span id="Parser-2998"><a href="#Parser-2998"><span class="linenos">2998</span></a> <span class="n">num</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-2999"><a href="#Parser-2999"><span class="linenos">2999</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">)</span>
-</span><span id="Parser-3000"><a href="#Parser-3000"><span class="linenos">3000</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3001"><a href="#Parser-3001"><span class="linenos">3001</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3002"><a href="#Parser-3002"><span class="linenos">3002</span></a> <span class="n">num</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-3003"><a href="#Parser-3003"><span class="linenos">3003</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">()</span>
-</span><span id="Parser-3004"><a href="#Parser-3004"><span class="linenos">3004</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-3005"><a href="#Parser-3005"><span class="linenos">3005</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="Parser-3006"><a href="#Parser-3006"><span class="linenos">3006</span></a> <span class="p">)</span>
-</span><span id="Parser-3007"><a href="#Parser-3007"><span class="linenos">3007</span></a>
-</span><span id="Parser-3008"><a href="#Parser-3008"><span class="linenos">3008</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKET&quot;</span><span class="p">):</span>
-</span><span id="Parser-3009"><a href="#Parser-3009"><span class="linenos">3009</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="Parser-3010"><a href="#Parser-3010"><span class="linenos">3010</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUT&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
-</span><span id="Parser-3011"><a href="#Parser-3011"><span class="linenos">3011</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="Parser-3012"><a href="#Parser-3012"><span class="linenos">3012</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
-</span><span id="Parser-3013"><a href="#Parser-3013"><span class="linenos">3013</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="Parser-3014"><a href="#Parser-3014"><span class="linenos">3014</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">)):</span>
-</span><span id="Parser-3015"><a href="#Parser-3015"><span class="linenos">3015</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="Parser-3016"><a href="#Parser-3016"><span class="linenos">3016</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
-</span><span id="Parser-3017"><a href="#Parser-3017"><span class="linenos">3017</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="Parser-3018"><a href="#Parser-3018"><span class="linenos">3018</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3019"><a href="#Parser-3019"><span class="linenos">3019</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
-</span><span id="Parser-3020"><a href="#Parser-3020"><span class="linenos">3020</span></a>
-</span><span id="Parser-3021"><a href="#Parser-3021"><span class="linenos">3021</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
-</span><span id="Parser-3022"><a href="#Parser-3022"><span class="linenos">3022</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-3023"><a href="#Parser-3023"><span class="linenos">3023</span></a>
-</span><span id="Parser-3024"><a href="#Parser-3024"><span class="linenos">3024</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-3025"><a href="#Parser-3025"><span class="linenos">3025</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-3026"><a href="#Parser-3026"><span class="linenos">3026</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="Parser-3027"><a href="#Parser-3027"><span class="linenos">3027</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-3028"><a href="#Parser-3028"><span class="linenos">3028</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="s2">&quot;REPEATABLE&quot;</span><span class="p">)):</span>
-</span><span id="Parser-3029"><a href="#Parser-3029"><span class="linenos">3029</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">)</span>
-</span><span id="Parser-3030"><a href="#Parser-3030"><span class="linenos">3030</span></a>
-</span><span id="Parser-3031"><a href="#Parser-3031"><span class="linenos">3031</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3032"><a href="#Parser-3032"><span class="linenos">3032</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
-</span><span id="Parser-3033"><a href="#Parser-3033"><span class="linenos">3033</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-3034"><a href="#Parser-3034"><span class="linenos">3034</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
-</span><span id="Parser-3035"><a href="#Parser-3035"><span class="linenos">3035</span></a> <span class="n">bucket_numerator</span><span class="o">=</span><span class="n">bucket_numerator</span><span class="p">,</span>
-</span><span id="Parser-3036"><a href="#Parser-3036"><span class="linenos">3036</span></a> <span class="n">bucket_denominator</span><span class="o">=</span><span class="n">bucket_denominator</span><span class="p">,</span>
-</span><span id="Parser-3037"><a href="#Parser-3037"><span class="linenos">3037</span></a> <span class="n">bucket_field</span><span class="o">=</span><span class="n">bucket_field</span><span class="p">,</span>
-</span><span id="Parser-3038"><a href="#Parser-3038"><span class="linenos">3038</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="Parser-3039"><a href="#Parser-3039"><span class="linenos">3039</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
-</span><span id="Parser-3040"><a href="#Parser-3040"><span class="linenos">3040</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
-</span><span id="Parser-3041"><a href="#Parser-3041"><span class="linenos">3041</span></a> <span class="p">)</span>
-</span><span id="Parser-3042"><a href="#Parser-3042"><span class="linenos">3042</span></a>
-</span><span id="Parser-3043"><a href="#Parser-3043"><span class="linenos">3043</span></a> <span class="k">def</span> <span class="nf">_parse_pivots</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]]:</span>
-</span><span id="Parser-3044"><a href="#Parser-3044"><span class="linenos">3044</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
-</span><span id="Parser-3045"><a href="#Parser-3045"><span class="linenos">3045</span></a>
-</span><span id="Parser-3046"><a href="#Parser-3046"><span class="linenos">3046</span></a> <span class="k">def</span> <span class="nf">_parse_joins</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]]:</span>
-</span><span id="Parser-3047"><a href="#Parser-3047"><span class="linenos">3047</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="Parser-2987"><a href="#Parser-2987"><span class="linenos">2987</span></a> <span class="k">def</span> <span class="nf">_parse_table_sample</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">as_modifier</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">]:</span>
+</span><span id="Parser-2988"><a href="#Parser-2988"><span class="linenos">2988</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE_SAMPLE</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
+</span><span id="Parser-2989"><a href="#Parser-2989"><span class="linenos">2989</span></a> <span class="n">as_modifier</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;USING&quot;</span><span class="p">,</span> <span class="s2">&quot;SAMPLE&quot;</span><span class="p">)</span>
+</span><span id="Parser-2990"><a href="#Parser-2990"><span class="linenos">2990</span></a> <span class="p">):</span>
+</span><span id="Parser-2991"><a href="#Parser-2991"><span class="linenos">2991</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-2992"><a href="#Parser-2992"><span class="linenos">2992</span></a>
+</span><span id="Parser-2993"><a href="#Parser-2993"><span class="linenos">2993</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2994"><a href="#Parser-2994"><span class="linenos">2994</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2995"><a href="#Parser-2995"><span class="linenos">2995</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2996"><a href="#Parser-2996"><span class="linenos">2996</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2997"><a href="#Parser-2997"><span class="linenos">2997</span></a> <span class="n">size</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2998"><a href="#Parser-2998"><span class="linenos">2998</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-2999"><a href="#Parser-2999"><span class="linenos">2999</span></a>
+</span><span id="Parser-3000"><a href="#Parser-3000"><span class="linenos">3000</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,),</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3001"><a href="#Parser-3001"><span class="linenos">3001</span></a> <span class="n">matched_l_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
+</span><span id="Parser-3002"><a href="#Parser-3002"><span class="linenos">3002</span></a>
+</span><span id="Parser-3003"><a href="#Parser-3003"><span class="linenos">3003</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">TABLESAMPLE_CSV</span><span class="p">:</span>
+</span><span id="Parser-3004"><a href="#Parser-3004"><span class="linenos">3004</span></a> <span class="n">num</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3005"><a href="#Parser-3005"><span class="linenos">3005</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">)</span>
+</span><span id="Parser-3006"><a href="#Parser-3006"><span class="linenos">3006</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3007"><a href="#Parser-3007"><span class="linenos">3007</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3008"><a href="#Parser-3008"><span class="linenos">3008</span></a> <span class="n">num</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-3009"><a href="#Parser-3009"><span class="linenos">3009</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">()</span>
+</span><span id="Parser-3010"><a href="#Parser-3010"><span class="linenos">3010</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3011"><a href="#Parser-3011"><span class="linenos">3011</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-3012"><a href="#Parser-3012"><span class="linenos">3012</span></a> <span class="p">)</span>
+</span><span id="Parser-3013"><a href="#Parser-3013"><span class="linenos">3013</span></a>
+</span><span id="Parser-3014"><a href="#Parser-3014"><span class="linenos">3014</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BUCKET&quot;</span><span class="p">):</span>
+</span><span id="Parser-3015"><a href="#Parser-3015"><span class="linenos">3015</span></a> <span class="n">bucket_numerator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="Parser-3016"><a href="#Parser-3016"><span class="linenos">3016</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OUT&quot;</span><span class="p">,</span> <span class="s2">&quot;OF&quot;</span><span class="p">)</span>
+</span><span id="Parser-3017"><a href="#Parser-3017"><span class="linenos">3017</span></a> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="n">bucket_denominator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="Parser-3018"><a href="#Parser-3018"><span class="linenos">3018</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
+</span><span id="Parser-3019"><a href="#Parser-3019"><span class="linenos">3019</span></a> <span class="n">bucket_field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="Parser-3020"><a href="#Parser-3020"><span class="linenos">3020</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">MOD</span><span class="p">)):</span>
+</span><span id="Parser-3021"><a href="#Parser-3021"><span class="linenos">3021</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="Parser-3022"><a href="#Parser-3022"><span class="linenos">3022</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TABLESAMPLE_SIZE_IS_PERCENT</span><span class="p">:</span>
+</span><span id="Parser-3023"><a href="#Parser-3023"><span class="linenos">3023</span></a> <span class="n">size</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="Parser-3024"><a href="#Parser-3024"><span class="linenos">3024</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3025"><a href="#Parser-3025"><span class="linenos">3025</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="n">num</span>
+</span><span id="Parser-3026"><a href="#Parser-3026"><span class="linenos">3026</span></a>
+</span><span id="Parser-3027"><a href="#Parser-3027"><span class="linenos">3027</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
+</span><span id="Parser-3028"><a href="#Parser-3028"><span class="linenos">3028</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-3029"><a href="#Parser-3029"><span class="linenos">3029</span></a>
+</span><span id="Parser-3030"><a href="#Parser-3030"><span class="linenos">3030</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-3031"><a href="#Parser-3031"><span class="linenos">3031</span></a> <span class="n">method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3032"><a href="#Parser-3032"><span class="linenos">3032</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="Parser-3033"><a href="#Parser-3033"><span class="linenos">3033</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-3034"><a href="#Parser-3034"><span class="linenos">3034</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;SEED&quot;</span><span class="p">,</span> <span class="s2">&quot;REPEATABLE&quot;</span><span class="p">)):</span>
+</span><span id="Parser-3035"><a href="#Parser-3035"><span class="linenos">3035</span></a> <span class="n">seed</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">)</span>
+</span><span id="Parser-3036"><a href="#Parser-3036"><span class="linenos">3036</span></a>
+</span><span id="Parser-3037"><a href="#Parser-3037"><span class="linenos">3037</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3038"><a href="#Parser-3038"><span class="linenos">3038</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TableSample</span><span class="p">,</span>
+</span><span id="Parser-3039"><a href="#Parser-3039"><span class="linenos">3039</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-3040"><a href="#Parser-3040"><span class="linenos">3040</span></a> <span class="n">method</span><span class="o">=</span><span class="n">method</span><span class="p">,</span>
+</span><span id="Parser-3041"><a href="#Parser-3041"><span class="linenos">3041</span></a> <span class="n">bucket_numerator</span><span class="o">=</span><span class="n">bucket_numerator</span><span class="p">,</span>
+</span><span id="Parser-3042"><a href="#Parser-3042"><span class="linenos">3042</span></a> <span class="n">bucket_denominator</span><span class="o">=</span><span class="n">bucket_denominator</span><span class="p">,</span>
+</span><span id="Parser-3043"><a href="#Parser-3043"><span class="linenos">3043</span></a> <span class="n">bucket_field</span><span class="o">=</span><span class="n">bucket_field</span><span class="p">,</span>
+</span><span id="Parser-3044"><a href="#Parser-3044"><span class="linenos">3044</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="Parser-3045"><a href="#Parser-3045"><span class="linenos">3045</span></a> <span class="n">size</span><span class="o">=</span><span class="n">size</span><span class="p">,</span>
+</span><span id="Parser-3046"><a href="#Parser-3046"><span class="linenos">3046</span></a> <span class="n">seed</span><span class="o">=</span><span class="n">seed</span><span class="p">,</span>
+</span><span id="Parser-3047"><a href="#Parser-3047"><span class="linenos">3047</span></a> <span class="p">)</span>
</span><span id="Parser-3048"><a href="#Parser-3048"><span class="linenos">3048</span></a>
-</span><span id="Parser-3049"><a href="#Parser-3049"><span class="linenos">3049</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
-</span><span id="Parser-3050"><a href="#Parser-3050"><span class="linenos">3050</span></a> <span class="k">def</span> <span class="nf">_parse_simplified_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span>
-</span><span id="Parser-3051"><a href="#Parser-3051"><span class="linenos">3051</span></a> <span class="k">def</span> <span class="nf">_parse_on</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3052"><a href="#Parser-3052"><span class="linenos">3052</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-3053"><a href="#Parser-3053"><span class="linenos">3053</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="Parser-3049"><a href="#Parser-3049"><span class="linenos">3049</span></a> <span class="k">def</span> <span class="nf">_parse_pivots</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]]:</span>
+</span><span id="Parser-3050"><a href="#Parser-3050"><span class="linenos">3050</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
+</span><span id="Parser-3051"><a href="#Parser-3051"><span class="linenos">3051</span></a>
+</span><span id="Parser-3052"><a href="#Parser-3052"><span class="linenos">3052</span></a> <span class="k">def</span> <span class="nf">_parse_joins</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">]]:</span>
+</span><span id="Parser-3053"><a href="#Parser-3053"><span class="linenos">3053</span></a> <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_join</span><span class="p">,</span> <span class="kc">None</span><span class="p">))</span> <span class="ow">or</span> <span class="kc">None</span>
</span><span id="Parser-3054"><a href="#Parser-3054"><span class="linenos">3054</span></a>
-</span><span id="Parser-3055"><a href="#Parser-3055"><span class="linenos">3055</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="Parser-3056"><a href="#Parser-3056"><span class="linenos">3056</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_on</span><span class="p">)</span>
-</span><span id="Parser-3057"><a href="#Parser-3057"><span class="linenos">3057</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="Parser-3058"><a href="#Parser-3058"><span class="linenos">3058</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
-</span><span id="Parser-3059"><a href="#Parser-3059"><span class="linenos">3059</span></a> <span class="p">)</span>
-</span><span id="Parser-3060"><a href="#Parser-3060"><span class="linenos">3060</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
-</span><span id="Parser-3061"><a href="#Parser-3061"><span class="linenos">3061</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3062"><a href="#Parser-3062"><span class="linenos">3062</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span> <span class="n">group</span><span class="o">=</span><span class="n">group</span>
-</span><span id="Parser-3063"><a href="#Parser-3063"><span class="linenos">3063</span></a> <span class="p">)</span>
-</span><span id="Parser-3064"><a href="#Parser-3064"><span class="linenos">3064</span></a>
-</span><span id="Parser-3065"><a href="#Parser-3065"><span class="linenos">3065</span></a> <span class="k">def</span> <span class="nf">_parse_pivot_in</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
-</span><span id="Parser-3066"><a href="#Parser-3066"><span class="linenos">3066</span></a> <span class="k">def</span> <span class="nf">_parse_aliased_expression</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3067"><a href="#Parser-3067"><span class="linenos">3067</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-3068"><a href="#Parser-3068"><span class="linenos">3068</span></a>
-</span><span id="Parser-3069"><a href="#Parser-3069"><span class="linenos">3069</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
-</span><span id="Parser-3070"><a href="#Parser-3070"><span class="linenos">3070</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="Parser-3071"><a href="#Parser-3071"><span class="linenos">3071</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-3072"><a href="#Parser-3072"><span class="linenos">3072</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PivotAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="Parser-3073"><a href="#Parser-3073"><span class="linenos">3073</span></a>
-</span><span id="Parser-3074"><a href="#Parser-3074"><span class="linenos">3074</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3075"><a href="#Parser-3075"><span class="linenos">3075</span></a>
-</span><span id="Parser-3076"><a href="#Parser-3076"><span class="linenos">3076</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-3077"><a href="#Parser-3077"><span class="linenos">3077</span></a>
-</span><span id="Parser-3078"><a href="#Parser-3078"><span class="linenos">3078</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-3079"><a href="#Parser-3079"><span class="linenos">3079</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting IN (&quot;</span><span class="p">)</span>
-</span><span id="Parser-3080"><a href="#Parser-3080"><span class="linenos">3080</span></a>
-</span><span id="Parser-3081"><a href="#Parser-3081"><span class="linenos">3081</span></a> <span class="n">aliased_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_aliased_expression</span><span class="p">)</span>
-</span><span id="Parser-3082"><a href="#Parser-3082"><span class="linenos">3082</span></a>
-</span><span id="Parser-3083"><a href="#Parser-3083"><span class="linenos">3083</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-3084"><a href="#Parser-3084"><span class="linenos">3084</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">aliased_expressions</span><span class="p">)</span>
-</span><span id="Parser-3085"><a href="#Parser-3085"><span class="linenos">3085</span></a>
-</span><span id="Parser-3086"><a href="#Parser-3086"><span class="linenos">3086</span></a> <span class="k">def</span> <span class="nf">_parse_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]:</span>
-</span><span id="Parser-3087"><a href="#Parser-3087"><span class="linenos">3087</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3088"><a href="#Parser-3088"><span class="linenos">3088</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3089"><a href="#Parser-3089"><span class="linenos">3089</span></a>
-</span><span id="Parser-3090"><a href="#Parser-3090"><span class="linenos">3090</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">):</span>
-</span><span id="Parser-3091"><a href="#Parser-3091"><span class="linenos">3091</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3092"><a href="#Parser-3092"><span class="linenos">3092</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">):</span>
-</span><span id="Parser-3093"><a href="#Parser-3093"><span class="linenos">3093</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3094"><a href="#Parser-3094"><span class="linenos">3094</span></a>
-</span><span id="Parser-3095"><a href="#Parser-3095"><span class="linenos">3095</span></a> <span class="c1"># https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-qry-select-unpivot.html#syntax</span>
-</span><span id="Parser-3096"><a href="#Parser-3096"><span class="linenos">3096</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="Parser-3097"><a href="#Parser-3097"><span class="linenos">3097</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3098"><a href="#Parser-3098"><span class="linenos">3098</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;EXCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="Parser-3099"><a href="#Parser-3099"><span class="linenos">3099</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3100"><a href="#Parser-3100"><span class="linenos">3100</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3101"><a href="#Parser-3101"><span class="linenos">3101</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3102"><a href="#Parser-3102"><span class="linenos">3102</span></a>
-</span><span id="Parser-3103"><a href="#Parser-3103"><span class="linenos">3103</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-3104"><a href="#Parser-3104"><span class="linenos">3104</span></a>
-</span><span id="Parser-3105"><a href="#Parser-3105"><span class="linenos">3105</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-3106"><a href="#Parser-3106"><span class="linenos">3106</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3055"><a href="#Parser-3055"><span class="linenos">3055</span></a> <span class="c1"># https://duckdb.org/docs/sql/statements/pivot</span>
+</span><span id="Parser-3056"><a href="#Parser-3056"><span class="linenos">3056</span></a> <span class="k">def</span> <span class="nf">_parse_simplified_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span>
+</span><span id="Parser-3057"><a href="#Parser-3057"><span class="linenos">3057</span></a> <span class="k">def</span> <span class="nf">_parse_on</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3058"><a href="#Parser-3058"><span class="linenos">3058</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-3059"><a href="#Parser-3059"><span class="linenos">3059</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_in</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">)</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="Parser-3060"><a href="#Parser-3060"><span class="linenos">3060</span></a>
+</span><span id="Parser-3061"><a href="#Parser-3061"><span class="linenos">3061</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="Parser-3062"><a href="#Parser-3062"><span class="linenos">3062</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_on</span><span class="p">)</span>
+</span><span id="Parser-3063"><a href="#Parser-3063"><span class="linenos">3063</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="Parser-3064"><a href="#Parser-3064"><span class="linenos">3064</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">())</span>
+</span><span id="Parser-3065"><a href="#Parser-3065"><span class="linenos">3065</span></a> <span class="p">)</span>
+</span><span id="Parser-3066"><a href="#Parser-3066"><span class="linenos">3066</span></a> <span class="n">group</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_group</span><span class="p">()</span>
+</span><span id="Parser-3067"><a href="#Parser-3067"><span class="linenos">3067</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3068"><a href="#Parser-3068"><span class="linenos">3068</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span> <span class="n">group</span><span class="o">=</span><span class="n">group</span>
+</span><span id="Parser-3069"><a href="#Parser-3069"><span class="linenos">3069</span></a> <span class="p">)</span>
+</span><span id="Parser-3070"><a href="#Parser-3070"><span class="linenos">3070</span></a>
+</span><span id="Parser-3071"><a href="#Parser-3071"><span class="linenos">3071</span></a> <span class="k">def</span> <span class="nf">_parse_pivot_in</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
+</span><span id="Parser-3072"><a href="#Parser-3072"><span class="linenos">3072</span></a> <span class="k">def</span> <span class="nf">_parse_aliased_expression</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3073"><a href="#Parser-3073"><span class="linenos">3073</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-3074"><a href="#Parser-3074"><span class="linenos">3074</span></a>
+</span><span id="Parser-3075"><a href="#Parser-3075"><span class="linenos">3075</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
+</span><span id="Parser-3076"><a href="#Parser-3076"><span class="linenos">3076</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="Parser-3077"><a href="#Parser-3077"><span class="linenos">3077</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-3078"><a href="#Parser-3078"><span class="linenos">3078</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PivotAlias</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="Parser-3079"><a href="#Parser-3079"><span class="linenos">3079</span></a>
+</span><span id="Parser-3080"><a href="#Parser-3080"><span class="linenos">3080</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3081"><a href="#Parser-3081"><span class="linenos">3081</span></a>
+</span><span id="Parser-3082"><a href="#Parser-3082"><span class="linenos">3082</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-3083"><a href="#Parser-3083"><span class="linenos">3083</span></a>
+</span><span id="Parser-3084"><a href="#Parser-3084"><span class="linenos">3084</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-3085"><a href="#Parser-3085"><span class="linenos">3085</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting IN (&quot;</span><span class="p">)</span>
+</span><span id="Parser-3086"><a href="#Parser-3086"><span class="linenos">3086</span></a>
+</span><span id="Parser-3087"><a href="#Parser-3087"><span class="linenos">3087</span></a> <span class="n">aliased_expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_aliased_expression</span><span class="p">)</span>
+</span><span id="Parser-3088"><a href="#Parser-3088"><span class="linenos">3088</span></a>
+</span><span id="Parser-3089"><a href="#Parser-3089"><span class="linenos">3089</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-3090"><a href="#Parser-3090"><span class="linenos">3090</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">value</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">aliased_expressions</span><span class="p">)</span>
+</span><span id="Parser-3091"><a href="#Parser-3091"><span class="linenos">3091</span></a>
+</span><span id="Parser-3092"><a href="#Parser-3092"><span class="linenos">3092</span></a> <span class="k">def</span> <span class="nf">_parse_pivot</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">]:</span>
+</span><span id="Parser-3093"><a href="#Parser-3093"><span class="linenos">3093</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-3094"><a href="#Parser-3094"><span class="linenos">3094</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3095"><a href="#Parser-3095"><span class="linenos">3095</span></a>
+</span><span id="Parser-3096"><a href="#Parser-3096"><span class="linenos">3096</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">):</span>
+</span><span id="Parser-3097"><a href="#Parser-3097"><span class="linenos">3097</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3098"><a href="#Parser-3098"><span class="linenos">3098</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">):</span>
+</span><span id="Parser-3099"><a href="#Parser-3099"><span class="linenos">3099</span></a> <span class="n">unpivot</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3100"><a href="#Parser-3100"><span class="linenos">3100</span></a>
+</span><span id="Parser-3101"><a href="#Parser-3101"><span class="linenos">3101</span></a> <span class="c1"># https://docs.databricks.com/en/sql/language-manual/sql-ref-syntax-qry-select-unpivot.html#syntax</span>
+</span><span id="Parser-3102"><a href="#Parser-3102"><span class="linenos">3102</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="Parser-3103"><a href="#Parser-3103"><span class="linenos">3103</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3104"><a href="#Parser-3104"><span class="linenos">3104</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;EXCLUDE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="Parser-3105"><a href="#Parser-3105"><span class="linenos">3105</span></a> <span class="n">include_nulls</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3106"><a href="#Parser-3106"><span class="linenos">3106</span></a> <span class="k">else</span><span class="p">:</span>
</span><span id="Parser-3107"><a href="#Parser-3107"><span class="linenos">3107</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-3108"><a href="#Parser-3108"><span class="linenos">3108</span></a>
-</span><span id="Parser-3109"><a href="#Parser-3109"><span class="linenos">3109</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
-</span><span id="Parser-3110"><a href="#Parser-3110"><span class="linenos">3110</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="Parser-3111"><a href="#Parser-3111"><span class="linenos">3111</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3112"><a href="#Parser-3112"><span class="linenos">3112</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()))</span>
-</span><span id="Parser-3113"><a href="#Parser-3113"><span class="linenos">3113</span></a>
-</span><span id="Parser-3114"><a href="#Parser-3114"><span class="linenos">3114</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-3115"><a href="#Parser-3115"><span class="linenos">3115</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Failed to parse PIVOT&#39;s aggregation list&quot;</span><span class="p">)</span>
-</span><span id="Parser-3116"><a href="#Parser-3116"><span class="linenos">3116</span></a>
-</span><span id="Parser-3117"><a href="#Parser-3117"><span class="linenos">3117</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
-</span><span id="Parser-3118"><a href="#Parser-3118"><span class="linenos">3118</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting FOR&quot;</span><span class="p">)</span>
+</span><span id="Parser-3109"><a href="#Parser-3109"><span class="linenos">3109</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-3110"><a href="#Parser-3110"><span class="linenos">3110</span></a>
+</span><span id="Parser-3111"><a href="#Parser-3111"><span class="linenos">3111</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-3112"><a href="#Parser-3112"><span class="linenos">3112</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3113"><a href="#Parser-3113"><span class="linenos">3113</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3114"><a href="#Parser-3114"><span class="linenos">3114</span></a>
+</span><span id="Parser-3115"><a href="#Parser-3115"><span class="linenos">3115</span></a> <span class="k">if</span> <span class="n">unpivot</span><span class="p">:</span>
+</span><span id="Parser-3116"><a href="#Parser-3116"><span class="linenos">3116</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="Parser-3117"><a href="#Parser-3117"><span class="linenos">3117</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3118"><a href="#Parser-3118"><span class="linenos">3118</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()))</span>
</span><span id="Parser-3119"><a href="#Parser-3119"><span class="linenos">3119</span></a>
-</span><span id="Parser-3120"><a href="#Parser-3120"><span class="linenos">3120</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot_in</span><span class="p">()</span>
-</span><span id="Parser-3121"><a href="#Parser-3121"><span class="linenos">3121</span></a>
-</span><span id="Parser-3122"><a href="#Parser-3122"><span class="linenos">3122</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-3123"><a href="#Parser-3123"><span class="linenos">3123</span></a>
-</span><span id="Parser-3124"><a href="#Parser-3124"><span class="linenos">3124</span></a> <span class="n">pivot</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3125"><a href="#Parser-3125"><span class="linenos">3125</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span>
-</span><span id="Parser-3126"><a href="#Parser-3126"><span class="linenos">3126</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-3127"><a href="#Parser-3127"><span class="linenos">3127</span></a> <span class="n">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
-</span><span id="Parser-3128"><a href="#Parser-3128"><span class="linenos">3128</span></a> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">,</span>
-</span><span id="Parser-3129"><a href="#Parser-3129"><span class="linenos">3129</span></a> <span class="n">include_nulls</span><span class="o">=</span><span class="n">include_nulls</span><span class="p">,</span>
-</span><span id="Parser-3130"><a href="#Parser-3130"><span class="linenos">3130</span></a> <span class="p">)</span>
-</span><span id="Parser-3131"><a href="#Parser-3131"><span class="linenos">3131</span></a>
-</span><span id="Parser-3132"><a href="#Parser-3132"><span class="linenos">3132</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-3133"><a href="#Parser-3133"><span class="linenos">3133</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
-</span><span id="Parser-3134"><a href="#Parser-3134"><span class="linenos">3134</span></a>
-</span><span id="Parser-3135"><a href="#Parser-3135"><span class="linenos">3135</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unpivot</span><span class="p">:</span>
-</span><span id="Parser-3136"><a href="#Parser-3136"><span class="linenos">3136</span></a> <span class="n">names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">expressions</span><span class="p">))</span>
+</span><span id="Parser-3120"><a href="#Parser-3120"><span class="linenos">3120</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-3121"><a href="#Parser-3121"><span class="linenos">3121</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Failed to parse PIVOT&#39;s aggregation list&quot;</span><span class="p">)</span>
+</span><span id="Parser-3122"><a href="#Parser-3122"><span class="linenos">3122</span></a>
+</span><span id="Parser-3123"><a href="#Parser-3123"><span class="linenos">3123</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
+</span><span id="Parser-3124"><a href="#Parser-3124"><span class="linenos">3124</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting FOR&quot;</span><span class="p">)</span>
+</span><span id="Parser-3125"><a href="#Parser-3125"><span class="linenos">3125</span></a>
+</span><span id="Parser-3126"><a href="#Parser-3126"><span class="linenos">3126</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_pivot_in</span><span class="p">()</span>
+</span><span id="Parser-3127"><a href="#Parser-3127"><span class="linenos">3127</span></a>
+</span><span id="Parser-3128"><a href="#Parser-3128"><span class="linenos">3128</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-3129"><a href="#Parser-3129"><span class="linenos">3129</span></a>
+</span><span id="Parser-3130"><a href="#Parser-3130"><span class="linenos">3130</span></a> <span class="n">pivot</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3131"><a href="#Parser-3131"><span class="linenos">3131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">,</span>
+</span><span id="Parser-3132"><a href="#Parser-3132"><span class="linenos">3132</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-3133"><a href="#Parser-3133"><span class="linenos">3133</span></a> <span class="n">field</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
+</span><span id="Parser-3134"><a href="#Parser-3134"><span class="linenos">3134</span></a> <span class="n">unpivot</span><span class="o">=</span><span class="n">unpivot</span><span class="p">,</span>
+</span><span id="Parser-3135"><a href="#Parser-3135"><span class="linenos">3135</span></a> <span class="n">include_nulls</span><span class="o">=</span><span class="n">include_nulls</span><span class="p">,</span>
+</span><span id="Parser-3136"><a href="#Parser-3136"><span class="linenos">3136</span></a> <span class="p">)</span>
</span><span id="Parser-3137"><a href="#Parser-3137"><span class="linenos">3137</span></a>
-</span><span id="Parser-3138"><a href="#Parser-3138"><span class="linenos">3138</span></a> <span class="n">columns</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-3139"><a href="#Parser-3139"><span class="linenos">3139</span></a> <span class="k">for</span> <span class="n">fld</span> <span class="ow">in</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;field&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-3140"><a href="#Parser-3140"><span class="linenos">3140</span></a> <span class="n">field_name</span> <span class="o">=</span> <span class="n">fld</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="k">else</span> <span class="n">fld</span><span class="o">.</span><span class="n">alias_or_name</span>
-</span><span id="Parser-3141"><a href="#Parser-3141"><span class="linenos">3141</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
-</span><span id="Parser-3142"><a href="#Parser-3142"><span class="linenos">3142</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">PREFIXED_PIVOT_COLUMNS</span><span class="p">:</span>
-</span><span id="Parser-3143"><a href="#Parser-3143"><span class="linenos">3143</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
-</span><span id="Parser-3144"><a href="#Parser-3144"><span class="linenos">3144</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3145"><a href="#Parser-3145"><span class="linenos">3145</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
-</span><span id="Parser-3146"><a href="#Parser-3146"><span class="linenos">3146</span></a>
-</span><span id="Parser-3147"><a href="#Parser-3147"><span class="linenos">3147</span></a> <span class="n">columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
-</span><span id="Parser-3148"><a href="#Parser-3148"><span class="linenos">3148</span></a>
-</span><span id="Parser-3149"><a href="#Parser-3149"><span class="linenos">3149</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">columns</span><span class="p">)</span>
-</span><span id="Parser-3150"><a href="#Parser-3150"><span class="linenos">3150</span></a>
-</span><span id="Parser-3151"><a href="#Parser-3151"><span class="linenos">3151</span></a> <span class="k">return</span> <span class="n">pivot</span>
+</span><span id="Parser-3138"><a href="#Parser-3138"><span class="linenos">3138</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PIVOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNPIVOT</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-3139"><a href="#Parser-3139"><span class="linenos">3139</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="Parser-3140"><a href="#Parser-3140"><span class="linenos">3140</span></a>
+</span><span id="Parser-3141"><a href="#Parser-3141"><span class="linenos">3141</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unpivot</span><span class="p">:</span>
+</span><span id="Parser-3142"><a href="#Parser-3142"><span class="linenos">3142</span></a> <span class="n">names</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pivot_column_names</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">expressions</span><span class="p">))</span>
+</span><span id="Parser-3143"><a href="#Parser-3143"><span class="linenos">3143</span></a>
+</span><span id="Parser-3144"><a href="#Parser-3144"><span class="linenos">3144</span></a> <span class="n">columns</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-3145"><a href="#Parser-3145"><span class="linenos">3145</span></a> <span class="k">for</span> <span class="n">fld</span> <span class="ow">in</span> <span class="n">pivot</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;field&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-3146"><a href="#Parser-3146"><span class="linenos">3146</span></a> <span class="n">field_name</span> <span class="o">=</span> <span class="n">fld</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">IDENTIFY_PIVOT_STRINGS</span> <span class="k">else</span> <span class="n">fld</span><span class="o">.</span><span class="n">alias_or_name</span>
+</span><span id="Parser-3147"><a href="#Parser-3147"><span class="linenos">3147</span></a> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">names</span><span class="p">:</span>
+</span><span id="Parser-3148"><a href="#Parser-3148"><span class="linenos">3148</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">PREFIXED_PIVOT_COLUMNS</span><span class="p">:</span>
+</span><span id="Parser-3149"><a href="#Parser-3149"><span class="linenos">3149</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
+</span><span id="Parser-3150"><a href="#Parser-3150"><span class="linenos">3150</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3151"><a href="#Parser-3151"><span class="linenos">3151</span></a> <span class="n">name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">field_name</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">name</span> <span class="k">else</span> <span class="n">field_name</span>
</span><span id="Parser-3152"><a href="#Parser-3152"><span class="linenos">3152</span></a>
-</span><span id="Parser-3153"><a href="#Parser-3153"><span class="linenos">3153</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Parser-3154"><a href="#Parser-3154"><span class="linenos">3154</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">]</span>
-</span><span id="Parser-3155"><a href="#Parser-3155"><span class="linenos">3155</span></a>
-</span><span id="Parser-3156"><a href="#Parser-3156"><span class="linenos">3156</span></a> <span class="k">def</span> <span class="nf">_parse_where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">]:</span>
-</span><span id="Parser-3157"><a href="#Parser-3157"><span class="linenos">3157</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_where_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">):</span>
-</span><span id="Parser-3158"><a href="#Parser-3158"><span class="linenos">3158</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3159"><a href="#Parser-3159"><span class="linenos">3159</span></a>
-</span><span id="Parser-3160"><a href="#Parser-3160"><span class="linenos">3160</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3161"><a href="#Parser-3161"><span class="linenos">3161</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-3162"><a href="#Parser-3162"><span class="linenos">3162</span></a> <span class="p">)</span>
-</span><span id="Parser-3163"><a href="#Parser-3163"><span class="linenos">3163</span></a>
-</span><span id="Parser-3164"><a href="#Parser-3164"><span class="linenos">3164</span></a> <span class="k">def</span> <span class="nf">_parse_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_group_by_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">]:</span>
-</span><span id="Parser-3165"><a href="#Parser-3165"><span class="linenos">3165</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_group_by_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">):</span>
-</span><span id="Parser-3166"><a href="#Parser-3166"><span class="linenos">3166</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3167"><a href="#Parser-3167"><span class="linenos">3167</span></a>
-</span><span id="Parser-3168"><a href="#Parser-3168"><span class="linenos">3168</span></a> <span class="n">elements</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
+</span><span id="Parser-3153"><a href="#Parser-3153"><span class="linenos">3153</span></a> <span class="n">columns</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="n">name</span><span class="p">))</span>
+</span><span id="Parser-3154"><a href="#Parser-3154"><span class="linenos">3154</span></a>
+</span><span id="Parser-3155"><a href="#Parser-3155"><span class="linenos">3155</span></a> <span class="n">pivot</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;columns&quot;</span><span class="p">,</span> <span class="n">columns</span><span class="p">)</span>
+</span><span id="Parser-3156"><a href="#Parser-3156"><span class="linenos">3156</span></a>
+</span><span id="Parser-3157"><a href="#Parser-3157"><span class="linenos">3157</span></a> <span class="k">return</span> <span class="n">pivot</span>
+</span><span id="Parser-3158"><a href="#Parser-3158"><span class="linenos">3158</span></a>
+</span><span id="Parser-3159"><a href="#Parser-3159"><span class="linenos">3159</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Parser-3160"><a href="#Parser-3160"><span class="linenos">3160</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">agg</span><span class="o">.</span><span class="n">alias</span> <span class="k">for</span> <span class="n">agg</span> <span class="ow">in</span> <span class="n">aggregations</span><span class="p">]</span>
+</span><span id="Parser-3161"><a href="#Parser-3161"><span class="linenos">3161</span></a>
+</span><span id="Parser-3162"><a href="#Parser-3162"><span class="linenos">3162</span></a> <span class="k">def</span> <span class="nf">_parse_where</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_where_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">]:</span>
+</span><span id="Parser-3163"><a href="#Parser-3163"><span class="linenos">3163</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_where_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">):</span>
+</span><span id="Parser-3164"><a href="#Parser-3164"><span class="linenos">3164</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3165"><a href="#Parser-3165"><span class="linenos">3165</span></a>
+</span><span id="Parser-3166"><a href="#Parser-3166"><span class="linenos">3166</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3167"><a href="#Parser-3167"><span class="linenos">3167</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Where</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-3168"><a href="#Parser-3168"><span class="linenos">3168</span></a> <span class="p">)</span>
</span><span id="Parser-3169"><a href="#Parser-3169"><span class="linenos">3169</span></a>
-</span><span id="Parser-3170"><a href="#Parser-3170"><span class="linenos">3170</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
-</span><span id="Parser-3171"><a href="#Parser-3171"><span class="linenos">3171</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">,</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-3172"><a href="#Parser-3172"><span class="linenos">3172</span></a>
-</span><span id="Parser-3173"><a href="#Parser-3173"><span class="linenos">3173</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-3174"><a href="#Parser-3174"><span class="linenos">3174</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
-</span><span id="Parser-3175"><a href="#Parser-3175"><span class="linenos">3175</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-3176"><a href="#Parser-3176"><span class="linenos">3176</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;expressions&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-3177"><a href="#Parser-3177"><span class="linenos">3177</span></a>
-</span><span id="Parser-3178"><a href="#Parser-3178"><span class="linenos">3178</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_grouping_sets</span><span class="p">()</span>
-</span><span id="Parser-3179"><a href="#Parser-3179"><span class="linenos">3179</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
-</span><span id="Parser-3180"><a href="#Parser-3180"><span class="linenos">3180</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">)</span>
-</span><span id="Parser-3181"><a href="#Parser-3181"><span class="linenos">3181</span></a>
-</span><span id="Parser-3182"><a href="#Parser-3182"><span class="linenos">3182</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3183"><a href="#Parser-3183"><span class="linenos">3183</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3184"><a href="#Parser-3184"><span class="linenos">3184</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3185"><a href="#Parser-3185"><span class="linenos">3185</span></a>
-</span><span id="Parser-3186"><a href="#Parser-3186"><span class="linenos">3186</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3187"><a href="#Parser-3187"><span class="linenos">3187</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">)</span>
-</span><span id="Parser-3188"><a href="#Parser-3188"><span class="linenos">3188</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLUP</span><span class="p">):</span>
-</span><span id="Parser-3189"><a href="#Parser-3189"><span class="linenos">3189</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="Parser-3190"><a href="#Parser-3190"><span class="linenos">3190</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;rollup&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">rollup</span><span class="p">))</span>
+</span><span id="Parser-3170"><a href="#Parser-3170"><span class="linenos">3170</span></a> <span class="k">def</span> <span class="nf">_parse_group</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_group_by_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">]:</span>
+</span><span id="Parser-3171"><a href="#Parser-3171"><span class="linenos">3171</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_group_by_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUP_BY</span><span class="p">):</span>
+</span><span id="Parser-3172"><a href="#Parser-3172"><span class="linenos">3172</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3173"><a href="#Parser-3173"><span class="linenos">3173</span></a>
+</span><span id="Parser-3174"><a href="#Parser-3174"><span class="linenos">3174</span></a> <span class="n">elements</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
+</span><span id="Parser-3175"><a href="#Parser-3175"><span class="linenos">3175</span></a>
+</span><span id="Parser-3176"><a href="#Parser-3176"><span class="linenos">3176</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">):</span>
+</span><span id="Parser-3177"><a href="#Parser-3177"><span class="linenos">3177</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">,</span> <span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3178"><a href="#Parser-3178"><span class="linenos">3178</span></a>
+</span><span id="Parser-3179"><a href="#Parser-3179"><span class="linenos">3179</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-3180"><a href="#Parser-3180"><span class="linenos">3180</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="Parser-3181"><a href="#Parser-3181"><span class="linenos">3181</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-3182"><a href="#Parser-3182"><span class="linenos">3182</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;expressions&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-3183"><a href="#Parser-3183"><span class="linenos">3183</span></a>
+</span><span id="Parser-3184"><a href="#Parser-3184"><span class="linenos">3184</span></a> <span class="n">grouping_sets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_grouping_sets</span><span class="p">()</span>
+</span><span id="Parser-3185"><a href="#Parser-3185"><span class="linenos">3185</span></a> <span class="k">if</span> <span class="n">grouping_sets</span><span class="p">:</span>
+</span><span id="Parser-3186"><a href="#Parser-3186"><span class="linenos">3186</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;grouping_sets&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">grouping_sets</span><span class="p">)</span>
+</span><span id="Parser-3187"><a href="#Parser-3187"><span class="linenos">3187</span></a>
+</span><span id="Parser-3188"><a href="#Parser-3188"><span class="linenos">3188</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3189"><a href="#Parser-3189"><span class="linenos">3189</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3190"><a href="#Parser-3190"><span class="linenos">3190</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3191"><a href="#Parser-3191"><span class="linenos">3191</span></a>
-</span><span id="Parser-3192"><a href="#Parser-3192"><span class="linenos">3192</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CUBE</span><span class="p">):</span>
-</span><span id="Parser-3193"><a href="#Parser-3193"><span class="linenos">3193</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="Parser-3194"><a href="#Parser-3194"><span class="linenos">3194</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;cube&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">cube</span><span class="p">))</span>
-</span><span id="Parser-3195"><a href="#Parser-3195"><span class="linenos">3195</span></a>
-</span><span id="Parser-3196"><a href="#Parser-3196"><span class="linenos">3196</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TOTALS&quot;</span><span class="p">):</span>
-</span><span id="Parser-3197"><a href="#Parser-3197"><span class="linenos">3197</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3198"><a href="#Parser-3198"><span class="linenos">3198</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-3199"><a href="#Parser-3199"><span class="linenos">3199</span></a>
-</span><span id="Parser-3200"><a href="#Parser-3200"><span class="linenos">3200</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">grouping_sets</span> <span class="ow">or</span> <span class="n">rollup</span> <span class="ow">or</span> <span class="n">cube</span> <span class="ow">or</span> <span class="n">totals</span><span class="p">):</span>
-</span><span id="Parser-3201"><a href="#Parser-3201"><span class="linenos">3201</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
-</span><span id="Parser-3202"><a href="#Parser-3202"><span class="linenos">3202</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-3203"><a href="#Parser-3203"><span class="linenos">3203</span></a> <span class="k">break</span>
-</span><span id="Parser-3204"><a href="#Parser-3204"><span class="linenos">3204</span></a>
-</span><span id="Parser-3205"><a href="#Parser-3205"><span class="linenos">3205</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">,</span> <span class="o">**</span><span class="n">elements</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-3206"><a href="#Parser-3206"><span class="linenos">3206</span></a>
-</span><span id="Parser-3207"><a href="#Parser-3207"><span class="linenos">3207</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_sets</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Parser-3208"><a href="#Parser-3208"><span class="linenos">3208</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUPING_SETS</span><span class="p">):</span>
-</span><span id="Parser-3209"><a href="#Parser-3209"><span class="linenos">3209</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3192"><a href="#Parser-3192"><span class="linenos">3192</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-3193"><a href="#Parser-3193"><span class="linenos">3193</span></a> <span class="n">with_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">)</span>
+</span><span id="Parser-3194"><a href="#Parser-3194"><span class="linenos">3194</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLUP</span><span class="p">):</span>
+</span><span id="Parser-3195"><a href="#Parser-3195"><span class="linenos">3195</span></a> <span class="n">rollup</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="Parser-3196"><a href="#Parser-3196"><span class="linenos">3196</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;rollup&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">rollup</span><span class="p">))</span>
+</span><span id="Parser-3197"><a href="#Parser-3197"><span class="linenos">3197</span></a>
+</span><span id="Parser-3198"><a href="#Parser-3198"><span class="linenos">3198</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CUBE</span><span class="p">):</span>
+</span><span id="Parser-3199"><a href="#Parser-3199"><span class="linenos">3199</span></a> <span class="n">cube</span> <span class="o">=</span> <span class="n">with_</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="Parser-3200"><a href="#Parser-3200"><span class="linenos">3200</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;cube&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">ensure_list</span><span class="p">(</span><span class="n">cube</span><span class="p">))</span>
+</span><span id="Parser-3201"><a href="#Parser-3201"><span class="linenos">3201</span></a>
+</span><span id="Parser-3202"><a href="#Parser-3202"><span class="linenos">3202</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TOTALS&quot;</span><span class="p">):</span>
+</span><span id="Parser-3203"><a href="#Parser-3203"><span class="linenos">3203</span></a> <span class="n">totals</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3204"><a href="#Parser-3204"><span class="linenos">3204</span></a> <span class="n">elements</span><span class="p">[</span><span class="s2">&quot;totals&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-3205"><a href="#Parser-3205"><span class="linenos">3205</span></a>
+</span><span id="Parser-3206"><a href="#Parser-3206"><span class="linenos">3206</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">grouping_sets</span> <span class="ow">or</span> <span class="n">rollup</span> <span class="ow">or</span> <span class="n">cube</span> <span class="ow">or</span> <span class="n">totals</span><span class="p">):</span>
+</span><span id="Parser-3207"><a href="#Parser-3207"><span class="linenos">3207</span></a> <span class="k">if</span> <span class="n">with_</span><span class="p">:</span>
+</span><span id="Parser-3208"><a href="#Parser-3208"><span class="linenos">3208</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3209"><a href="#Parser-3209"><span class="linenos">3209</span></a> <span class="k">break</span>
</span><span id="Parser-3210"><a href="#Parser-3210"><span class="linenos">3210</span></a>
-</span><span id="Parser-3211"><a href="#Parser-3211"><span class="linenos">3211</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_grouping_set</span><span class="p">)</span>
+</span><span id="Parser-3211"><a href="#Parser-3211"><span class="linenos">3211</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Group</span><span class="p">,</span> <span class="o">**</span><span class="n">elements</span><span class="p">)</span> <span class="c1"># type: ignore</span>
</span><span id="Parser-3212"><a href="#Parser-3212"><span class="linenos">3212</span></a>
-</span><span id="Parser-3213"><a href="#Parser-3213"><span class="linenos">3213</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_set</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3214"><a href="#Parser-3214"><span class="linenos">3214</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-3215"><a href="#Parser-3215"><span class="linenos">3215</span></a> <span class="n">grouping_set</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="Parser-3216"><a href="#Parser-3216"><span class="linenos">3216</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-3217"><a href="#Parser-3217"><span class="linenos">3217</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">grouping_set</span><span class="p">)</span>
+</span><span id="Parser-3213"><a href="#Parser-3213"><span class="linenos">3213</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_sets</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-3214"><a href="#Parser-3214"><span class="linenos">3214</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GROUPING_SETS</span><span class="p">):</span>
+</span><span id="Parser-3215"><a href="#Parser-3215"><span class="linenos">3215</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3216"><a href="#Parser-3216"><span class="linenos">3216</span></a>
+</span><span id="Parser-3217"><a href="#Parser-3217"><span class="linenos">3217</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_grouping_set</span><span class="p">)</span>
</span><span id="Parser-3218"><a href="#Parser-3218"><span class="linenos">3218</span></a>
-</span><span id="Parser-3219"><a href="#Parser-3219"><span class="linenos">3219</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-3220"><a href="#Parser-3220"><span class="linenos">3220</span></a>
-</span><span id="Parser-3221"><a href="#Parser-3221"><span class="linenos">3221</span></a> <span class="k">def</span> <span class="nf">_parse_having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_having_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">]:</span>
-</span><span id="Parser-3222"><a href="#Parser-3222"><span class="linenos">3222</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_having_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">):</span>
-</span><span id="Parser-3223"><a href="#Parser-3223"><span class="linenos">3223</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3224"><a href="#Parser-3224"><span class="linenos">3224</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="Parser-3225"><a href="#Parser-3225"><span class="linenos">3225</span></a>
-</span><span id="Parser-3226"><a href="#Parser-3226"><span class="linenos">3226</span></a> <span class="k">def</span> <span class="nf">_parse_qualify</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">]:</span>
-</span><span id="Parser-3227"><a href="#Parser-3227"><span class="linenos">3227</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">):</span>
-</span><span id="Parser-3228"><a href="#Parser-3228"><span class="linenos">3228</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3229"><a href="#Parser-3229"><span class="linenos">3229</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="Parser-3230"><a href="#Parser-3230"><span class="linenos">3230</span></a>
-</span><span id="Parser-3231"><a href="#Parser-3231"><span class="linenos">3231</span></a> <span class="k">def</span> <span class="nf">_parse_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_start_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">]:</span>
-</span><span id="Parser-3232"><a href="#Parser-3232"><span class="linenos">3232</span></a> <span class="k">if</span> <span class="n">skip_start_token</span><span class="p">:</span>
-</span><span id="Parser-3233"><a href="#Parser-3233"><span class="linenos">3233</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3234"><a href="#Parser-3234"><span class="linenos">3234</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
-</span><span id="Parser-3235"><a href="#Parser-3235"><span class="linenos">3235</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-3236"><a href="#Parser-3236"><span class="linenos">3236</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3237"><a href="#Parser-3237"><span class="linenos">3237</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3238"><a href="#Parser-3238"><span class="linenos">3238</span></a>
-</span><span id="Parser-3239"><a href="#Parser-3239"><span class="linenos">3239</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">)</span>
-</span><span id="Parser-3240"><a href="#Parser-3240"><span class="linenos">3240</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">[</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3241"><a href="#Parser-3241"><span class="linenos">3241</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Prior</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-3242"><a href="#Parser-3242"><span class="linenos">3242</span></a> <span class="p">)</span>
-</span><span id="Parser-3243"><a href="#Parser-3243"><span class="linenos">3243</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-3244"><a href="#Parser-3244"><span class="linenos">3244</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">)</span>
-</span><span id="Parser-3245"><a href="#Parser-3245"><span class="linenos">3245</span></a>
-</span><span id="Parser-3246"><a href="#Parser-3246"><span class="linenos">3246</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
-</span><span id="Parser-3247"><a href="#Parser-3247"><span class="linenos">3247</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-3248"><a href="#Parser-3248"><span class="linenos">3248</span></a>
-</span><span id="Parser-3249"><a href="#Parser-3249"><span class="linenos">3249</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">connect</span><span class="o">=</span><span class="n">connect</span><span class="p">)</span>
-</span><span id="Parser-3250"><a href="#Parser-3250"><span class="linenos">3250</span></a>
-</span><span id="Parser-3251"><a href="#Parser-3251"><span class="linenos">3251</span></a> <span class="k">def</span> <span class="nf">_parse_name_as_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">:</span>
-</span><span id="Parser-3252"><a href="#Parser-3252"><span class="linenos">3252</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3253"><a href="#Parser-3253"><span class="linenos">3253</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span>
-</span><span id="Parser-3254"><a href="#Parser-3254"><span class="linenos">3254</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Parser-3255"><a href="#Parser-3255"><span class="linenos">3255</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="Parser-3256"><a href="#Parser-3256"><span class="linenos">3256</span></a> <span class="p">)</span>
-</span><span id="Parser-3257"><a href="#Parser-3257"><span class="linenos">3257</span></a>
-</span><span id="Parser-3258"><a href="#Parser-3258"><span class="linenos">3258</span></a> <span class="k">def</span> <span class="nf">_parse_interpolate</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Parser-3259"><a href="#Parser-3259"><span class="linenos">3259</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INTERPOLATE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3260"><a href="#Parser-3260"><span class="linenos">3260</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_name_as_expression</span><span class="p">)</span>
-</span><span id="Parser-3261"><a href="#Parser-3261"><span class="linenos">3261</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3262"><a href="#Parser-3262"><span class="linenos">3262</span></a>
-</span><span id="Parser-3263"><a href="#Parser-3263"><span class="linenos">3263</span></a> <span class="k">def</span> <span class="nf">_parse_order</span><span class="p">(</span>
-</span><span id="Parser-3264"><a href="#Parser-3264"><span class="linenos">3264</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">skip_order_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3265"><a href="#Parser-3265"><span class="linenos">3265</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3266"><a href="#Parser-3266"><span class="linenos">3266</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3267"><a href="#Parser-3267"><span class="linenos">3267</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_order_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">):</span>
-</span><span id="Parser-3268"><a href="#Parser-3268"><span class="linenos">3268</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_SIBLINGS_BY</span><span class="p">):</span>
-</span><span id="Parser-3269"><a href="#Parser-3269"><span class="linenos">3269</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3270"><a href="#Parser-3270"><span class="linenos">3270</span></a>
-</span><span id="Parser-3271"><a href="#Parser-3271"><span class="linenos">3271</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3272"><a href="#Parser-3272"><span class="linenos">3272</span></a>
-</span><span id="Parser-3273"><a href="#Parser-3273"><span class="linenos">3273</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3274"><a href="#Parser-3274"><span class="linenos">3274</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">,</span>
-</span><span id="Parser-3275"><a href="#Parser-3275"><span class="linenos">3275</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3276"><a href="#Parser-3276"><span class="linenos">3276</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">),</span>
-</span><span id="Parser-3277"><a href="#Parser-3277"><span class="linenos">3277</span></a> <span class="n">interpolate</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interpolate</span><span class="p">(),</span>
-</span><span id="Parser-3278"><a href="#Parser-3278"><span class="linenos">3278</span></a> <span class="n">siblings</span><span class="o">=</span><span class="n">siblings</span><span class="p">,</span>
-</span><span id="Parser-3279"><a href="#Parser-3279"><span class="linenos">3279</span></a> <span class="p">)</span>
-</span><span id="Parser-3280"><a href="#Parser-3280"><span class="linenos">3280</span></a>
-</span><span id="Parser-3281"><a href="#Parser-3281"><span class="linenos">3281</span></a> <span class="k">def</span> <span class="nf">_parse_sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">token</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
-</span><span id="Parser-3282"><a href="#Parser-3282"><span class="linenos">3282</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
-</span><span id="Parser-3283"><a href="#Parser-3283"><span class="linenos">3283</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3284"><a href="#Parser-3284"><span class="linenos">3284</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp_class</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">))</span>
-</span><span id="Parser-3285"><a href="#Parser-3285"><span class="linenos">3285</span></a>
-</span><span id="Parser-3286"><a href="#Parser-3286"><span class="linenos">3286</span></a> <span class="k">def</span> <span class="nf">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">:</span>
-</span><span id="Parser-3287"><a href="#Parser-3287"><span class="linenos">3287</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span> <span class="k">if</span> <span class="n">parse_method</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-3288"><a href="#Parser-3288"><span class="linenos">3288</span></a>
-</span><span id="Parser-3289"><a href="#Parser-3289"><span class="linenos">3289</span></a> <span class="n">asc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">)</span>
-</span><span id="Parser-3290"><a href="#Parser-3290"><span class="linenos">3290</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3219"><a href="#Parser-3219"><span class="linenos">3219</span></a> <span class="k">def</span> <span class="nf">_parse_grouping_set</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3220"><a href="#Parser-3220"><span class="linenos">3220</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-3221"><a href="#Parser-3221"><span class="linenos">3221</span></a> <span class="n">grouping_set</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="Parser-3222"><a href="#Parser-3222"><span class="linenos">3222</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-3223"><a href="#Parser-3223"><span class="linenos">3223</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">grouping_set</span><span class="p">)</span>
+</span><span id="Parser-3224"><a href="#Parser-3224"><span class="linenos">3224</span></a>
+</span><span id="Parser-3225"><a href="#Parser-3225"><span class="linenos">3225</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-3226"><a href="#Parser-3226"><span class="linenos">3226</span></a>
+</span><span id="Parser-3227"><a href="#Parser-3227"><span class="linenos">3227</span></a> <span class="k">def</span> <span class="nf">_parse_having</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_having_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">]:</span>
+</span><span id="Parser-3228"><a href="#Parser-3228"><span class="linenos">3228</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_having_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">):</span>
+</span><span id="Parser-3229"><a href="#Parser-3229"><span class="linenos">3229</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3230"><a href="#Parser-3230"><span class="linenos">3230</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Having</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="Parser-3231"><a href="#Parser-3231"><span class="linenos">3231</span></a>
+</span><span id="Parser-3232"><a href="#Parser-3232"><span class="linenos">3232</span></a> <span class="k">def</span> <span class="nf">_parse_qualify</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">]:</span>
+</span><span id="Parser-3233"><a href="#Parser-3233"><span class="linenos">3233</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">QUALIFY</span><span class="p">):</span>
+</span><span id="Parser-3234"><a href="#Parser-3234"><span class="linenos">3234</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3235"><a href="#Parser-3235"><span class="linenos">3235</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Qualify</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="Parser-3236"><a href="#Parser-3236"><span class="linenos">3236</span></a>
+</span><span id="Parser-3237"><a href="#Parser-3237"><span class="linenos">3237</span></a> <span class="k">def</span> <span class="nf">_parse_connect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip_start_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">]:</span>
+</span><span id="Parser-3238"><a href="#Parser-3238"><span class="linenos">3238</span></a> <span class="k">if</span> <span class="n">skip_start_token</span><span class="p">:</span>
+</span><span id="Parser-3239"><a href="#Parser-3239"><span class="linenos">3239</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3240"><a href="#Parser-3240"><span class="linenos">3240</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
+</span><span id="Parser-3241"><a href="#Parser-3241"><span class="linenos">3241</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-3242"><a href="#Parser-3242"><span class="linenos">3242</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3243"><a href="#Parser-3243"><span class="linenos">3243</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3244"><a href="#Parser-3244"><span class="linenos">3244</span></a>
+</span><span id="Parser-3245"><a href="#Parser-3245"><span class="linenos">3245</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONNECT_BY</span><span class="p">)</span>
+</span><span id="Parser-3246"><a href="#Parser-3246"><span class="linenos">3246</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="p">[</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3247"><a href="#Parser-3247"><span class="linenos">3247</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Prior</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-3248"><a href="#Parser-3248"><span class="linenos">3248</span></a> <span class="p">)</span>
+</span><span id="Parser-3249"><a href="#Parser-3249"><span class="linenos">3249</span></a> <span class="n">connect</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-3250"><a href="#Parser-3250"><span class="linenos">3250</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;PRIOR&quot;</span><span class="p">)</span>
+</span><span id="Parser-3251"><a href="#Parser-3251"><span class="linenos">3251</span></a>
+</span><span id="Parser-3252"><a href="#Parser-3252"><span class="linenos">3252</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
+</span><span id="Parser-3253"><a href="#Parser-3253"><span class="linenos">3253</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-3254"><a href="#Parser-3254"><span class="linenos">3254</span></a>
+</span><span id="Parser-3255"><a href="#Parser-3255"><span class="linenos">3255</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Connect</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">connect</span><span class="o">=</span><span class="n">connect</span><span class="p">)</span>
+</span><span id="Parser-3256"><a href="#Parser-3256"><span class="linenos">3256</span></a>
+</span><span id="Parser-3257"><a href="#Parser-3257"><span class="linenos">3257</span></a> <span class="k">def</span> <span class="nf">_parse_name_as_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">:</span>
+</span><span id="Parser-3258"><a href="#Parser-3258"><span class="linenos">3258</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3259"><a href="#Parser-3259"><span class="linenos">3259</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span>
+</span><span id="Parser-3260"><a href="#Parser-3260"><span class="linenos">3260</span></a> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Parser-3261"><a href="#Parser-3261"><span class="linenos">3261</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="Parser-3262"><a href="#Parser-3262"><span class="linenos">3262</span></a> <span class="p">)</span>
+</span><span id="Parser-3263"><a href="#Parser-3263"><span class="linenos">3263</span></a>
+</span><span id="Parser-3264"><a href="#Parser-3264"><span class="linenos">3264</span></a> <span class="k">def</span> <span class="nf">_parse_interpolate</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-3265"><a href="#Parser-3265"><span class="linenos">3265</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INTERPOLATE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3266"><a href="#Parser-3266"><span class="linenos">3266</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_name_as_expression</span><span class="p">)</span>
+</span><span id="Parser-3267"><a href="#Parser-3267"><span class="linenos">3267</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3268"><a href="#Parser-3268"><span class="linenos">3268</span></a>
+</span><span id="Parser-3269"><a href="#Parser-3269"><span class="linenos">3269</span></a> <span class="k">def</span> <span class="nf">_parse_order</span><span class="p">(</span>
+</span><span id="Parser-3270"><a href="#Parser-3270"><span class="linenos">3270</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">skip_order_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3271"><a href="#Parser-3271"><span class="linenos">3271</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3272"><a href="#Parser-3272"><span class="linenos">3272</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3273"><a href="#Parser-3273"><span class="linenos">3273</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">skip_order_token</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_BY</span><span class="p">):</span>
+</span><span id="Parser-3274"><a href="#Parser-3274"><span class="linenos">3274</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ORDER_SIBLINGS_BY</span><span class="p">):</span>
+</span><span id="Parser-3275"><a href="#Parser-3275"><span class="linenos">3275</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3276"><a href="#Parser-3276"><span class="linenos">3276</span></a>
+</span><span id="Parser-3277"><a href="#Parser-3277"><span class="linenos">3277</span></a> <span class="n">siblings</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3278"><a href="#Parser-3278"><span class="linenos">3278</span></a>
+</span><span id="Parser-3279"><a href="#Parser-3279"><span class="linenos">3279</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3280"><a href="#Parser-3280"><span class="linenos">3280</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Order</span><span class="p">,</span>
+</span><span id="Parser-3281"><a href="#Parser-3281"><span class="linenos">3281</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3282"><a href="#Parser-3282"><span class="linenos">3282</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">),</span>
+</span><span id="Parser-3283"><a href="#Parser-3283"><span class="linenos">3283</span></a> <span class="n">interpolate</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interpolate</span><span class="p">(),</span>
+</span><span id="Parser-3284"><a href="#Parser-3284"><span class="linenos">3284</span></a> <span class="n">siblings</span><span class="o">=</span><span class="n">siblings</span><span class="p">,</span>
+</span><span id="Parser-3285"><a href="#Parser-3285"><span class="linenos">3285</span></a> <span class="p">)</span>
+</span><span id="Parser-3286"><a href="#Parser-3286"><span class="linenos">3286</span></a>
+</span><span id="Parser-3287"><a href="#Parser-3287"><span class="linenos">3287</span></a> <span class="k">def</span> <span class="nf">_parse_sort</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exp_class</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">E</span><span class="p">],</span> <span class="n">token</span><span class="p">:</span> <span class="n">TokenType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">E</span><span class="p">]:</span>
+</span><span id="Parser-3288"><a href="#Parser-3288"><span class="linenos">3288</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">token</span><span class="p">):</span>
+</span><span id="Parser-3289"><a href="#Parser-3289"><span class="linenos">3289</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3290"><a href="#Parser-3290"><span class="linenos">3290</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp_class</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">))</span>
</span><span id="Parser-3291"><a href="#Parser-3291"><span class="linenos">3291</span></a>
-</span><span id="Parser-3292"><a href="#Parser-3292"><span class="linenos">3292</span></a> <span class="n">is_nulls_first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">)</span>
-</span><span id="Parser-3293"><a href="#Parser-3293"><span class="linenos">3293</span></a> <span class="n">is_nulls_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">)</span>
+</span><span id="Parser-3292"><a href="#Parser-3292"><span class="linenos">3292</span></a> <span class="k">def</span> <span class="nf">_parse_ordered</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">:</span>
+</span><span id="Parser-3293"><a href="#Parser-3293"><span class="linenos">3293</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span> <span class="k">if</span> <span class="n">parse_method</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
</span><span id="Parser-3294"><a href="#Parser-3294"><span class="linenos">3294</span></a>
-</span><span id="Parser-3295"><a href="#Parser-3295"><span class="linenos">3295</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="kc">False</span>
-</span><span id="Parser-3296"><a href="#Parser-3296"><span class="linenos">3296</span></a> <span class="n">explicitly_null_ordered</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="n">is_nulls_last</span>
+</span><span id="Parser-3295"><a href="#Parser-3295"><span class="linenos">3295</span></a> <span class="n">asc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">)</span>
+</span><span id="Parser-3296"><a href="#Parser-3296"><span class="linenos">3296</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">asc</span> <span class="ow">and</span> <span class="kc">False</span><span class="p">)</span>
</span><span id="Parser-3297"><a href="#Parser-3297"><span class="linenos">3297</span></a>
-</span><span id="Parser-3298"><a href="#Parser-3298"><span class="linenos">3298</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Parser-3299"><a href="#Parser-3299"><span class="linenos">3299</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
-</span><span id="Parser-3300"><a href="#Parser-3300"><span class="linenos">3300</span></a> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="Parser-3301"><a href="#Parser-3301"><span class="linenos">3301</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
-</span><span id="Parser-3302"><a href="#Parser-3302"><span class="linenos">3302</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
-</span><span id="Parser-3303"><a href="#Parser-3303"><span class="linenos">3303</span></a> <span class="p">)</span>
-</span><span id="Parser-3304"><a href="#Parser-3304"><span class="linenos">3304</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
-</span><span id="Parser-3305"><a href="#Parser-3305"><span class="linenos">3305</span></a> <span class="p">):</span>
-</span><span id="Parser-3306"><a href="#Parser-3306"><span class="linenos">3306</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3307"><a href="#Parser-3307"><span class="linenos">3307</span></a>
-</span><span id="Parser-3308"><a href="#Parser-3308"><span class="linenos">3308</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;FILL&quot;</span><span class="p">):</span>
-</span><span id="Parser-3309"><a href="#Parser-3309"><span class="linenos">3309</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3310"><a href="#Parser-3310"><span class="linenos">3310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithFill</span><span class="p">,</span>
-</span><span id="Parser-3311"><a href="#Parser-3311"><span class="linenos">3311</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-3312"><a href="#Parser-3312"><span class="linenos">3312</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="Parser-3313"><a href="#Parser-3313"><span class="linenos">3313</span></a> <span class="s2">&quot;to&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="Parser-3314"><a href="#Parser-3314"><span class="linenos">3314</span></a> <span class="s2">&quot;step&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STEP&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="Parser-3315"><a href="#Parser-3315"><span class="linenos">3315</span></a> <span class="p">},</span>
-</span><span id="Parser-3316"><a href="#Parser-3316"><span class="linenos">3316</span></a> <span class="p">)</span>
-</span><span id="Parser-3317"><a href="#Parser-3317"><span class="linenos">3317</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3318"><a href="#Parser-3318"><span class="linenos">3318</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3319"><a href="#Parser-3319"><span class="linenos">3319</span></a>
-</span><span id="Parser-3320"><a href="#Parser-3320"><span class="linenos">3320</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3321"><a href="#Parser-3321"><span class="linenos">3321</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="n">nulls_first</span><span class="p">,</span> <span class="n">with_fill</span><span class="o">=</span><span class="n">with_fill</span>
-</span><span id="Parser-3322"><a href="#Parser-3322"><span class="linenos">3322</span></a> <span class="p">)</span>
-</span><span id="Parser-3323"><a href="#Parser-3323"><span class="linenos">3323</span></a>
-</span><span id="Parser-3324"><a href="#Parser-3324"><span class="linenos">3324</span></a> <span class="k">def</span> <span class="nf">_parse_limit</span><span class="p">(</span>
-</span><span id="Parser-3325"><a href="#Parser-3325"><span class="linenos">3325</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3326"><a href="#Parser-3326"><span class="linenos">3326</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3327"><a href="#Parser-3327"><span class="linenos">3327</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span> <span class="k">if</span> <span class="n">top</span> <span class="k">else</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">):</span>
-</span><span id="Parser-3328"><a href="#Parser-3328"><span class="linenos">3328</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="Parser-3329"><a href="#Parser-3329"><span class="linenos">3329</span></a> <span class="k">if</span> <span class="n">top</span><span class="p">:</span>
-</span><span id="Parser-3330"><a href="#Parser-3330"><span class="linenos">3330</span></a> <span class="n">limit_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
-</span><span id="Parser-3331"><a href="#Parser-3331"><span class="linenos">3331</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span> <span class="k">if</span> <span class="n">limit_paren</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
-</span><span id="Parser-3332"><a href="#Parser-3332"><span class="linenos">3332</span></a>
-</span><span id="Parser-3333"><a href="#Parser-3333"><span class="linenos">3333</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
-</span><span id="Parser-3334"><a href="#Parser-3334"><span class="linenos">3334</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-3335"><a href="#Parser-3335"><span class="linenos">3335</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3336"><a href="#Parser-3336"><span class="linenos">3336</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="Parser-3337"><a href="#Parser-3337"><span class="linenos">3337</span></a>
-</span><span id="Parser-3338"><a href="#Parser-3338"><span class="linenos">3338</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="Parser-3339"><a href="#Parser-3339"><span class="linenos">3339</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="Parser-3340"><a href="#Parser-3340"><span class="linenos">3340</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3298"><a href="#Parser-3298"><span class="linenos">3298</span></a> <span class="n">is_nulls_first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;FIRST&quot;</span><span class="p">)</span>
+</span><span id="Parser-3299"><a href="#Parser-3299"><span class="linenos">3299</span></a> <span class="n">is_nulls_last</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULLS&quot;</span><span class="p">,</span> <span class="s2">&quot;LAST&quot;</span><span class="p">)</span>
+</span><span id="Parser-3300"><a href="#Parser-3300"><span class="linenos">3300</span></a>
+</span><span id="Parser-3301"><a href="#Parser-3301"><span class="linenos">3301</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="kc">False</span>
+</span><span id="Parser-3302"><a href="#Parser-3302"><span class="linenos">3302</span></a> <span class="n">explicitly_null_ordered</span> <span class="o">=</span> <span class="n">is_nulls_first</span> <span class="ow">or</span> <span class="n">is_nulls_last</span>
+</span><span id="Parser-3303"><a href="#Parser-3303"><span class="linenos">3303</span></a>
+</span><span id="Parser-3304"><a href="#Parser-3304"><span class="linenos">3304</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Parser-3305"><a href="#Parser-3305"><span class="linenos">3305</span></a> <span class="ow">not</span> <span class="n">explicitly_null_ordered</span>
+</span><span id="Parser-3306"><a href="#Parser-3306"><span class="linenos">3306</span></a> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="Parser-3307"><a href="#Parser-3307"><span class="linenos">3307</span></a> <span class="p">(</span><span class="ow">not</span> <span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">==</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
+</span><span id="Parser-3308"><a href="#Parser-3308"><span class="linenos">3308</span></a> <span class="ow">or</span> <span class="p">(</span><span class="n">desc</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_small&quot;</span><span class="p">)</span>
+</span><span id="Parser-3309"><a href="#Parser-3309"><span class="linenos">3309</span></a> <span class="p">)</span>
+</span><span id="Parser-3310"><a href="#Parser-3310"><span class="linenos">3310</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NULL_ORDERING</span> <span class="o">!=</span> <span class="s2">&quot;nulls_are_last&quot;</span>
+</span><span id="Parser-3311"><a href="#Parser-3311"><span class="linenos">3311</span></a> <span class="p">):</span>
+</span><span id="Parser-3312"><a href="#Parser-3312"><span class="linenos">3312</span></a> <span class="n">nulls_first</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3313"><a href="#Parser-3313"><span class="linenos">3313</span></a>
+</span><span id="Parser-3314"><a href="#Parser-3314"><span class="linenos">3314</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;FILL&quot;</span><span class="p">):</span>
+</span><span id="Parser-3315"><a href="#Parser-3315"><span class="linenos">3315</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3316"><a href="#Parser-3316"><span class="linenos">3316</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithFill</span><span class="p">,</span>
+</span><span id="Parser-3317"><a href="#Parser-3317"><span class="linenos">3317</span></a> <span class="o">**</span><span class="p">{</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-3318"><a href="#Parser-3318"><span class="linenos">3318</span></a> <span class="s2">&quot;from&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="Parser-3319"><a href="#Parser-3319"><span class="linenos">3319</span></a> <span class="s2">&quot;to&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="Parser-3320"><a href="#Parser-3320"><span class="linenos">3320</span></a> <span class="s2">&quot;step&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;STEP&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="Parser-3321"><a href="#Parser-3321"><span class="linenos">3321</span></a> <span class="p">},</span>
+</span><span id="Parser-3322"><a href="#Parser-3322"><span class="linenos">3322</span></a> <span class="p">)</span>
+</span><span id="Parser-3323"><a href="#Parser-3323"><span class="linenos">3323</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3324"><a href="#Parser-3324"><span class="linenos">3324</span></a> <span class="n">with_fill</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3325"><a href="#Parser-3325"><span class="linenos">3325</span></a>
+</span><span id="Parser-3326"><a href="#Parser-3326"><span class="linenos">3326</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3327"><a href="#Parser-3327"><span class="linenos">3327</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span> <span class="n">nulls_first</span><span class="o">=</span><span class="n">nulls_first</span><span class="p">,</span> <span class="n">with_fill</span><span class="o">=</span><span class="n">with_fill</span>
+</span><span id="Parser-3328"><a href="#Parser-3328"><span class="linenos">3328</span></a> <span class="p">)</span>
+</span><span id="Parser-3329"><a href="#Parser-3329"><span class="linenos">3329</span></a>
+</span><span id="Parser-3330"><a href="#Parser-3330"><span class="linenos">3330</span></a> <span class="k">def</span> <span class="nf">_parse_limit</span><span class="p">(</span>
+</span><span id="Parser-3331"><a href="#Parser-3331"><span class="linenos">3331</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="n">top</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3332"><a href="#Parser-3332"><span class="linenos">3332</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3333"><a href="#Parser-3333"><span class="linenos">3333</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span> <span class="k">if</span> <span class="n">top</span> <span class="k">else</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LIMIT</span><span class="p">):</span>
+</span><span id="Parser-3334"><a href="#Parser-3334"><span class="linenos">3334</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
+</span><span id="Parser-3335"><a href="#Parser-3335"><span class="linenos">3335</span></a> <span class="k">if</span> <span class="n">top</span><span class="p">:</span>
+</span><span id="Parser-3336"><a href="#Parser-3336"><span class="linenos">3336</span></a> <span class="n">limit_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
+</span><span id="Parser-3337"><a href="#Parser-3337"><span class="linenos">3337</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span> <span class="k">if</span> <span class="n">limit_paren</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_number</span><span class="p">()</span>
+</span><span id="Parser-3338"><a href="#Parser-3338"><span class="linenos">3338</span></a>
+</span><span id="Parser-3339"><a href="#Parser-3339"><span class="linenos">3339</span></a> <span class="k">if</span> <span class="n">limit_paren</span><span class="p">:</span>
+</span><span id="Parser-3340"><a href="#Parser-3340"><span class="linenos">3340</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-3341"><a href="#Parser-3341"><span class="linenos">3341</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3342"><a href="#Parser-3342"><span class="linenos">3342</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3342"><a href="#Parser-3342"><span class="linenos">3342</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
</span><span id="Parser-3343"><a href="#Parser-3343"><span class="linenos">3343</span></a>
-</span><span id="Parser-3344"><a href="#Parser-3344"><span class="linenos">3344</span></a> <span class="n">limit_exp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3345"><a href="#Parser-3345"><span class="linenos">3345</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span>
-</span><span id="Parser-3346"><a href="#Parser-3346"><span class="linenos">3346</span></a> <span class="p">)</span>
-</span><span id="Parser-3347"><a href="#Parser-3347"><span class="linenos">3347</span></a>
-</span><span id="Parser-3348"><a href="#Parser-3348"><span class="linenos">3348</span></a> <span class="k">return</span> <span class="n">limit_exp</span>
+</span><span id="Parser-3344"><a href="#Parser-3344"><span class="linenos">3344</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="Parser-3345"><a href="#Parser-3345"><span class="linenos">3345</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="Parser-3346"><a href="#Parser-3346"><span class="linenos">3346</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3347"><a href="#Parser-3347"><span class="linenos">3347</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3348"><a href="#Parser-3348"><span class="linenos">3348</span></a> <span class="n">offset</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3349"><a href="#Parser-3349"><span class="linenos">3349</span></a>
-</span><span id="Parser-3350"><a href="#Parser-3350"><span class="linenos">3350</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">):</span>
-</span><span id="Parser-3351"><a href="#Parser-3351"><span class="linenos">3351</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">))</span>
-</span><span id="Parser-3352"><a href="#Parser-3352"><span class="linenos">3352</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;FIRST&quot;</span>
-</span><span id="Parser-3353"><a href="#Parser-3353"><span class="linenos">3353</span></a>
-</span><span id="Parser-3354"><a href="#Parser-3354"><span class="linenos">3354</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">FETCH_TOKENS</span><span class="p">)</span>
-</span><span id="Parser-3355"><a href="#Parser-3355"><span class="linenos">3355</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">)</span>
-</span><span id="Parser-3356"><a href="#Parser-3356"><span class="linenos">3356</span></a>
-</span><span id="Parser-3357"><a href="#Parser-3357"><span class="linenos">3357</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
+</span><span id="Parser-3350"><a href="#Parser-3350"><span class="linenos">3350</span></a> <span class="n">limit_exp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3351"><a href="#Parser-3351"><span class="linenos">3351</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Limit</span><span class="p">,</span>
+</span><span id="Parser-3352"><a href="#Parser-3352"><span class="linenos">3352</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3353"><a href="#Parser-3353"><span class="linenos">3353</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Parser-3354"><a href="#Parser-3354"><span class="linenos">3354</span></a> <span class="n">offset</span><span class="o">=</span><span class="n">offset</span><span class="p">,</span>
+</span><span id="Parser-3355"><a href="#Parser-3355"><span class="linenos">3355</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="Parser-3356"><a href="#Parser-3356"><span class="linenos">3356</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_by</span><span class="p">(),</span>
+</span><span id="Parser-3357"><a href="#Parser-3357"><span class="linenos">3357</span></a> <span class="p">)</span>
</span><span id="Parser-3358"><a href="#Parser-3358"><span class="linenos">3358</span></a>
-</span><span id="Parser-3359"><a href="#Parser-3359"><span class="linenos">3359</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
-</span><span id="Parser-3360"><a href="#Parser-3360"><span class="linenos">3360</span></a> <span class="n">with_ties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIES&quot;</span><span class="p">)</span>
-</span><span id="Parser-3361"><a href="#Parser-3361"><span class="linenos">3361</span></a>
-</span><span id="Parser-3362"><a href="#Parser-3362"><span class="linenos">3362</span></a> <span class="k">if</span> <span class="n">only</span> <span class="ow">and</span> <span class="n">with_ties</span><span class="p">:</span>
-</span><span id="Parser-3363"><a href="#Parser-3363"><span class="linenos">3363</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Cannot specify both ONLY and WITH TIES in FETCH clause&quot;</span><span class="p">)</span>
+</span><span id="Parser-3359"><a href="#Parser-3359"><span class="linenos">3359</span></a> <span class="k">return</span> <span class="n">limit_exp</span>
+</span><span id="Parser-3360"><a href="#Parser-3360"><span class="linenos">3360</span></a>
+</span><span id="Parser-3361"><a href="#Parser-3361"><span class="linenos">3361</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FETCH</span><span class="p">):</span>
+</span><span id="Parser-3362"><a href="#Parser-3362"><span class="linenos">3362</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NEXT</span><span class="p">))</span>
+</span><span id="Parser-3363"><a href="#Parser-3363"><span class="linenos">3363</span></a> <span class="n">direction</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">direction</span> <span class="k">else</span> <span class="s2">&quot;FIRST&quot;</span>
</span><span id="Parser-3364"><a href="#Parser-3364"><span class="linenos">3364</span></a>
-</span><span id="Parser-3365"><a href="#Parser-3365"><span class="linenos">3365</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3366"><a href="#Parser-3366"><span class="linenos">3366</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
-</span><span id="Parser-3367"><a href="#Parser-3367"><span class="linenos">3367</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
-</span><span id="Parser-3368"><a href="#Parser-3368"><span class="linenos">3368</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
-</span><span id="Parser-3369"><a href="#Parser-3369"><span class="linenos">3369</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
-</span><span id="Parser-3370"><a href="#Parser-3370"><span class="linenos">3370</span></a> <span class="n">with_ties</span><span class="o">=</span><span class="n">with_ties</span><span class="p">,</span>
-</span><span id="Parser-3371"><a href="#Parser-3371"><span class="linenos">3371</span></a> <span class="p">)</span>
+</span><span id="Parser-3365"><a href="#Parser-3365"><span class="linenos">3365</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">FETCH_TOKENS</span><span class="p">)</span>
+</span><span id="Parser-3366"><a href="#Parser-3366"><span class="linenos">3366</span></a> <span class="n">percent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PERCENT</span><span class="p">)</span>
+</span><span id="Parser-3367"><a href="#Parser-3367"><span class="linenos">3367</span></a>
+</span><span id="Parser-3368"><a href="#Parser-3368"><span class="linenos">3368</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
+</span><span id="Parser-3369"><a href="#Parser-3369"><span class="linenos">3369</span></a>
+</span><span id="Parser-3370"><a href="#Parser-3370"><span class="linenos">3370</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
+</span><span id="Parser-3371"><a href="#Parser-3371"><span class="linenos">3371</span></a> <span class="n">with_ties</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIES&quot;</span><span class="p">)</span>
</span><span id="Parser-3372"><a href="#Parser-3372"><span class="linenos">3372</span></a>
-</span><span id="Parser-3373"><a href="#Parser-3373"><span class="linenos">3373</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3374"><a href="#Parser-3374"><span class="linenos">3374</span></a>
-</span><span id="Parser-3375"><a href="#Parser-3375"><span class="linenos">3375</span></a> <span class="k">def</span> <span class="nf">_parse_offset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3376"><a href="#Parser-3376"><span class="linenos">3376</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
-</span><span id="Parser-3377"><a href="#Parser-3377"><span class="linenos">3377</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3378"><a href="#Parser-3378"><span class="linenos">3378</span></a>
-</span><span id="Parser-3379"><a href="#Parser-3379"><span class="linenos">3379</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="Parser-3380"><a href="#Parser-3380"><span class="linenos">3380</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
-</span><span id="Parser-3381"><a href="#Parser-3381"><span class="linenos">3381</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">count</span><span class="p">)</span>
-</span><span id="Parser-3382"><a href="#Parser-3382"><span class="linenos">3382</span></a>
-</span><span id="Parser-3383"><a href="#Parser-3383"><span class="linenos">3383</span></a> <span class="k">def</span> <span class="nf">_parse_locks</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">]:</span>
-</span><span id="Parser-3384"><a href="#Parser-3384"><span class="linenos">3384</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-3385"><a href="#Parser-3385"><span class="linenos">3385</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-3386"><a href="#Parser-3386"><span class="linenos">3386</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3387"><a href="#Parser-3387"><span class="linenos">3387</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3388"><a href="#Parser-3388"><span class="linenos">3388</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
-</span><span id="Parser-3389"><a href="#Parser-3389"><span class="linenos">3389</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
-</span><span id="Parser-3390"><a href="#Parser-3390"><span class="linenos">3390</span></a> <span class="p">):</span>
-</span><span id="Parser-3391"><a href="#Parser-3391"><span class="linenos">3391</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3392"><a href="#Parser-3392"><span class="linenos">3392</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3393"><a href="#Parser-3393"><span class="linenos">3393</span></a> <span class="k">break</span>
-</span><span id="Parser-3394"><a href="#Parser-3394"><span class="linenos">3394</span></a>
-</span><span id="Parser-3395"><a href="#Parser-3395"><span class="linenos">3395</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3396"><a href="#Parser-3396"><span class="linenos">3396</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OF&quot;</span><span class="p">):</span>
-</span><span id="Parser-3397"><a href="#Parser-3397"><span class="linenos">3397</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Parser-3398"><a href="#Parser-3398"><span class="linenos">3398</span></a>
-</span><span id="Parser-3399"><a href="#Parser-3399"><span class="linenos">3399</span></a> <span class="n">wait</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3400"><a href="#Parser-3400"><span class="linenos">3400</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOWAIT&quot;</span><span class="p">):</span>
-</span><span id="Parser-3401"><a href="#Parser-3401"><span class="linenos">3401</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3402"><a href="#Parser-3402"><span class="linenos">3402</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WAIT&quot;</span><span class="p">):</span>
-</span><span id="Parser-3403"><a href="#Parser-3403"><span class="linenos">3403</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-3404"><a href="#Parser-3404"><span class="linenos">3404</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SKIP&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCKED&quot;</span><span class="p">):</span>
-</span><span id="Parser-3405"><a href="#Parser-3405"><span class="linenos">3405</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3406"><a href="#Parser-3406"><span class="linenos">3406</span></a>
-</span><span id="Parser-3407"><a href="#Parser-3407"><span class="linenos">3407</span></a> <span class="n">locks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-3408"><a href="#Parser-3408"><span class="linenos">3408</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait</span><span class="p">)</span>
-</span><span id="Parser-3409"><a href="#Parser-3409"><span class="linenos">3409</span></a> <span class="p">)</span>
-</span><span id="Parser-3410"><a href="#Parser-3410"><span class="linenos">3410</span></a>
-</span><span id="Parser-3411"><a href="#Parser-3411"><span class="linenos">3411</span></a> <span class="k">return</span> <span class="n">locks</span>
-</span><span id="Parser-3412"><a href="#Parser-3412"><span class="linenos">3412</span></a>
-</span><span id="Parser-3413"><a href="#Parser-3413"><span class="linenos">3413</span></a> <span class="k">def</span> <span class="nf">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3414"><a href="#Parser-3414"><span class="linenos">3414</span></a> <span class="k">while</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_OPERATIONS</span><span class="p">):</span>
-</span><span id="Parser-3415"><a href="#Parser-3415"><span class="linenos">3415</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
-</span><span id="Parser-3416"><a href="#Parser-3416"><span class="linenos">3416</span></a>
-</span><span id="Parser-3417"><a href="#Parser-3417"><span class="linenos">3417</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">:</span>
-</span><span id="Parser-3418"><a href="#Parser-3418"><span class="linenos">3418</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span>
-</span><span id="Parser-3419"><a href="#Parser-3419"><span class="linenos">3419</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">:</span>
-</span><span id="Parser-3420"><a href="#Parser-3420"><span class="linenos">3420</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span>
-</span><span id="Parser-3421"><a href="#Parser-3421"><span class="linenos">3421</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3422"><a href="#Parser-3422"><span class="linenos">3422</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span>
+</span><span id="Parser-3373"><a href="#Parser-3373"><span class="linenos">3373</span></a> <span class="k">if</span> <span class="n">only</span> <span class="ow">and</span> <span class="n">with_ties</span><span class="p">:</span>
+</span><span id="Parser-3374"><a href="#Parser-3374"><span class="linenos">3374</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Cannot specify both ONLY and WITH TIES in FETCH clause&quot;</span><span class="p">)</span>
+</span><span id="Parser-3375"><a href="#Parser-3375"><span class="linenos">3375</span></a>
+</span><span id="Parser-3376"><a href="#Parser-3376"><span class="linenos">3376</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3377"><a href="#Parser-3377"><span class="linenos">3377</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Fetch</span><span class="p">,</span>
+</span><span id="Parser-3378"><a href="#Parser-3378"><span class="linenos">3378</span></a> <span class="n">direction</span><span class="o">=</span><span class="n">direction</span><span class="p">,</span>
+</span><span id="Parser-3379"><a href="#Parser-3379"><span class="linenos">3379</span></a> <span class="n">count</span><span class="o">=</span><span class="n">count</span><span class="p">,</span>
+</span><span id="Parser-3380"><a href="#Parser-3380"><span class="linenos">3380</span></a> <span class="n">percent</span><span class="o">=</span><span class="n">percent</span><span class="p">,</span>
+</span><span id="Parser-3381"><a href="#Parser-3381"><span class="linenos">3381</span></a> <span class="n">with_ties</span><span class="o">=</span><span class="n">with_ties</span><span class="p">,</span>
+</span><span id="Parser-3382"><a href="#Parser-3382"><span class="linenos">3382</span></a> <span class="p">)</span>
+</span><span id="Parser-3383"><a href="#Parser-3383"><span class="linenos">3383</span></a>
+</span><span id="Parser-3384"><a href="#Parser-3384"><span class="linenos">3384</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3385"><a href="#Parser-3385"><span class="linenos">3385</span></a>
+</span><span id="Parser-3386"><a href="#Parser-3386"><span class="linenos">3386</span></a> <span class="k">def</span> <span class="nf">_parse_offset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3387"><a href="#Parser-3387"><span class="linenos">3387</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OFFSET</span><span class="p">):</span>
+</span><span id="Parser-3388"><a href="#Parser-3388"><span class="linenos">3388</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3389"><a href="#Parser-3389"><span class="linenos">3389</span></a>
+</span><span id="Parser-3390"><a href="#Parser-3390"><span class="linenos">3390</span></a> <span class="n">count</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3391"><a href="#Parser-3391"><span class="linenos">3391</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROW</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">))</span>
+</span><span id="Parser-3392"><a href="#Parser-3392"><span class="linenos">3392</span></a>
+</span><span id="Parser-3393"><a href="#Parser-3393"><span class="linenos">3393</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3394"><a href="#Parser-3394"><span class="linenos">3394</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Offset</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">count</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit_by</span><span class="p">()</span>
+</span><span id="Parser-3395"><a href="#Parser-3395"><span class="linenos">3395</span></a> <span class="p">)</span>
+</span><span id="Parser-3396"><a href="#Parser-3396"><span class="linenos">3396</span></a>
+</span><span id="Parser-3397"><a href="#Parser-3397"><span class="linenos">3397</span></a> <span class="k">def</span> <span class="nf">_parse_limit_by</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-3398"><a href="#Parser-3398"><span class="linenos">3398</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="Parser-3399"><a href="#Parser-3399"><span class="linenos">3399</span></a>
+</span><span id="Parser-3400"><a href="#Parser-3400"><span class="linenos">3400</span></a> <span class="k">def</span> <span class="nf">_parse_locks</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">]:</span>
+</span><span id="Parser-3401"><a href="#Parser-3401"><span class="linenos">3401</span></a> <span class="n">locks</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-3402"><a href="#Parser-3402"><span class="linenos">3402</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-3403"><a href="#Parser-3403"><span class="linenos">3403</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;UPDATE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3404"><a href="#Parser-3404"><span class="linenos">3404</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3405"><a href="#Parser-3405"><span class="linenos">3405</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span>
+</span><span id="Parser-3406"><a href="#Parser-3406"><span class="linenos">3406</span></a> <span class="s2">&quot;LOCK&quot;</span><span class="p">,</span> <span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;SHARE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span>
+</span><span id="Parser-3407"><a href="#Parser-3407"><span class="linenos">3407</span></a> <span class="p">):</span>
+</span><span id="Parser-3408"><a href="#Parser-3408"><span class="linenos">3408</span></a> <span class="n">update</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3409"><a href="#Parser-3409"><span class="linenos">3409</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3410"><a href="#Parser-3410"><span class="linenos">3410</span></a> <span class="k">break</span>
+</span><span id="Parser-3411"><a href="#Parser-3411"><span class="linenos">3411</span></a>
+</span><span id="Parser-3412"><a href="#Parser-3412"><span class="linenos">3412</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3413"><a href="#Parser-3413"><span class="linenos">3413</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;OF&quot;</span><span class="p">):</span>
+</span><span id="Parser-3414"><a href="#Parser-3414"><span class="linenos">3414</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Parser-3415"><a href="#Parser-3415"><span class="linenos">3415</span></a>
+</span><span id="Parser-3416"><a href="#Parser-3416"><span class="linenos">3416</span></a> <span class="n">wait</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3417"><a href="#Parser-3417"><span class="linenos">3417</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOWAIT&quot;</span><span class="p">):</span>
+</span><span id="Parser-3418"><a href="#Parser-3418"><span class="linenos">3418</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3419"><a href="#Parser-3419"><span class="linenos">3419</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WAIT&quot;</span><span class="p">):</span>
+</span><span id="Parser-3420"><a href="#Parser-3420"><span class="linenos">3420</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-3421"><a href="#Parser-3421"><span class="linenos">3421</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SKIP&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCKED&quot;</span><span class="p">):</span>
+</span><span id="Parser-3422"><a href="#Parser-3422"><span class="linenos">3422</span></a> <span class="n">wait</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Parser-3423"><a href="#Parser-3423"><span class="linenos">3423</span></a>
-</span><span id="Parser-3424"><a href="#Parser-3424"><span class="linenos">3424</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="Parser-3425"><a href="#Parser-3425"><span class="linenos">3425</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">)</span>
-</span><span id="Parser-3426"><a href="#Parser-3426"><span class="linenos">3426</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">)</span>
-</span><span id="Parser-3427"><a href="#Parser-3427"><span class="linenos">3427</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_set_operation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-3428"><a href="#Parser-3428"><span class="linenos">3428</span></a>
-</span><span id="Parser-3429"><a href="#Parser-3429"><span class="linenos">3429</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3430"><a href="#Parser-3430"><span class="linenos">3430</span></a> <span class="n">operation</span><span class="p">,</span>
-</span><span id="Parser-3431"><a href="#Parser-3431"><span class="linenos">3431</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="Parser-3432"><a href="#Parser-3432"><span class="linenos">3432</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3433"><a href="#Parser-3433"><span class="linenos">3433</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
-</span><span id="Parser-3434"><a href="#Parser-3434"><span class="linenos">3434</span></a> <span class="n">by_name</span><span class="o">=</span><span class="n">by_name</span><span class="p">,</span>
-</span><span id="Parser-3435"><a href="#Parser-3435"><span class="linenos">3435</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Parser-3436"><a href="#Parser-3436"><span class="linenos">3436</span></a> <span class="p">)</span>
-</span><span id="Parser-3437"><a href="#Parser-3437"><span class="linenos">3437</span></a>
-</span><span id="Parser-3438"><a href="#Parser-3438"><span class="linenos">3438</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">Union</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">MODIFIERS_ATTACHED_TO_UNION</span><span class="p">:</span>
-</span><span id="Parser-3439"><a href="#Parser-3439"><span class="linenos">3439</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">expression</span>
+</span><span id="Parser-3424"><a href="#Parser-3424"><span class="linenos">3424</span></a> <span class="n">locks</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-3425"><a href="#Parser-3425"><span class="linenos">3425</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Lock</span><span class="p">,</span> <span class="n">update</span><span class="o">=</span><span class="n">update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait</span><span class="p">)</span>
+</span><span id="Parser-3426"><a href="#Parser-3426"><span class="linenos">3426</span></a> <span class="p">)</span>
+</span><span id="Parser-3427"><a href="#Parser-3427"><span class="linenos">3427</span></a>
+</span><span id="Parser-3428"><a href="#Parser-3428"><span class="linenos">3428</span></a> <span class="k">return</span> <span class="n">locks</span>
+</span><span id="Parser-3429"><a href="#Parser-3429"><span class="linenos">3429</span></a>
+</span><span id="Parser-3430"><a href="#Parser-3430"><span class="linenos">3430</span></a> <span class="k">def</span> <span class="nf">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3431"><a href="#Parser-3431"><span class="linenos">3431</span></a> <span class="k">while</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_OPERATIONS</span><span class="p">):</span>
+</span><span id="Parser-3432"><a href="#Parser-3432"><span class="linenos">3432</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="Parser-3433"><a href="#Parser-3433"><span class="linenos">3433</span></a>
+</span><span id="Parser-3434"><a href="#Parser-3434"><span class="linenos">3434</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UNION</span><span class="p">:</span>
+</span><span id="Parser-3435"><a href="#Parser-3435"><span class="linenos">3435</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span>
+</span><span id="Parser-3436"><a href="#Parser-3436"><span class="linenos">3436</span></a> <span class="k">elif</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">:</span>
+</span><span id="Parser-3437"><a href="#Parser-3437"><span class="linenos">3437</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Except</span>
+</span><span id="Parser-3438"><a href="#Parser-3438"><span class="linenos">3438</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3439"><a href="#Parser-3439"><span class="linenos">3439</span></a> <span class="n">operation</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Intersect</span>
</span><span id="Parser-3440"><a href="#Parser-3440"><span class="linenos">3440</span></a>
-</span><span id="Parser-3441"><a href="#Parser-3441"><span class="linenos">3441</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Parser-3442"><a href="#Parser-3442"><span class="linenos">3442</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNION_MODIFIERS</span><span class="p">:</span>
-</span><span id="Parser-3443"><a href="#Parser-3443"><span class="linenos">3443</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
-</span><span id="Parser-3444"><a href="#Parser-3444"><span class="linenos">3444</span></a> <span class="k">if</span> <span class="n">expr</span><span class="p">:</span>
-</span><span id="Parser-3445"><a href="#Parser-3445"><span class="linenos">3445</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
-</span><span id="Parser-3446"><a href="#Parser-3446"><span class="linenos">3446</span></a>
-</span><span id="Parser-3447"><a href="#Parser-3447"><span class="linenos">3447</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3448"><a href="#Parser-3448"><span class="linenos">3448</span></a>
-</span><span id="Parser-3449"><a href="#Parser-3449"><span class="linenos">3449</span></a> <span class="k">def</span> <span class="nf">_parse_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3450"><a href="#Parser-3450"><span class="linenos">3450</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="Parser-3451"><a href="#Parser-3451"><span class="linenos">3451</span></a>
-</span><span id="Parser-3452"><a href="#Parser-3452"><span class="linenos">3452</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3453"><a href="#Parser-3453"><span class="linenos">3453</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONJUNCTION</span><span class="p">)</span>
+</span><span id="Parser-3441"><a href="#Parser-3441"><span class="linenos">3441</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="Parser-3442"><a href="#Parser-3442"><span class="linenos">3442</span></a> <span class="n">distinct</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALL</span><span class="p">)</span>
+</span><span id="Parser-3443"><a href="#Parser-3443"><span class="linenos">3443</span></a> <span class="n">by_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;NAME&quot;</span><span class="p">)</span>
+</span><span id="Parser-3444"><a href="#Parser-3444"><span class="linenos">3444</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_set_operation</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3445"><a href="#Parser-3445"><span class="linenos">3445</span></a>
+</span><span id="Parser-3446"><a href="#Parser-3446"><span class="linenos">3446</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3447"><a href="#Parser-3447"><span class="linenos">3447</span></a> <span class="n">operation</span><span class="p">,</span>
+</span><span id="Parser-3448"><a href="#Parser-3448"><span class="linenos">3448</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="Parser-3449"><a href="#Parser-3449"><span class="linenos">3449</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3450"><a href="#Parser-3450"><span class="linenos">3450</span></a> <span class="n">distinct</span><span class="o">=</span><span class="n">distinct</span><span class="p">,</span>
+</span><span id="Parser-3451"><a href="#Parser-3451"><span class="linenos">3451</span></a> <span class="n">by_name</span><span class="o">=</span><span class="n">by_name</span><span class="p">,</span>
+</span><span id="Parser-3452"><a href="#Parser-3452"><span class="linenos">3452</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Parser-3453"><a href="#Parser-3453"><span class="linenos">3453</span></a> <span class="p">)</span>
</span><span id="Parser-3454"><a href="#Parser-3454"><span class="linenos">3454</span></a>
-</span><span id="Parser-3455"><a href="#Parser-3455"><span class="linenos">3455</span></a> <span class="k">def</span> <span class="nf">_parse_equality</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3456"><a href="#Parser-3456"><span class="linenos">3456</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_comparison</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EQUALITY</span><span class="p">)</span>
+</span><span id="Parser-3455"><a href="#Parser-3455"><span class="linenos">3455</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">Union</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">MODIFIERS_ATTACHED_TO_UNION</span><span class="p">:</span>
+</span><span id="Parser-3456"><a href="#Parser-3456"><span class="linenos">3456</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">expression</span>
</span><span id="Parser-3457"><a href="#Parser-3457"><span class="linenos">3457</span></a>
-</span><span id="Parser-3458"><a href="#Parser-3458"><span class="linenos">3458</span></a> <span class="k">def</span> <span class="nf">_parse_comparison</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3459"><a href="#Parser-3459"><span class="linenos">3459</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_range</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPARISON</span><span class="p">)</span>
-</span><span id="Parser-3460"><a href="#Parser-3460"><span class="linenos">3460</span></a>
-</span><span id="Parser-3461"><a href="#Parser-3461"><span class="linenos">3461</span></a> <span class="k">def</span> <span class="nf">_parse_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3462"><a href="#Parser-3462"><span class="linenos">3462</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-3463"><a href="#Parser-3463"><span class="linenos">3463</span></a> <span class="n">negate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
-</span><span id="Parser-3464"><a href="#Parser-3464"><span class="linenos">3464</span></a>
-</span><span id="Parser-3465"><a href="#Parser-3465"><span class="linenos">3465</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">):</span>
-</span><span id="Parser-3466"><a href="#Parser-3466"><span class="linenos">3466</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3467"><a href="#Parser-3467"><span class="linenos">3467</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Parser-3468"><a href="#Parser-3468"><span class="linenos">3468</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3469"><a href="#Parser-3469"><span class="linenos">3469</span></a>
-</span><span id="Parser-3470"><a href="#Parser-3470"><span class="linenos">3470</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
-</span><span id="Parser-3471"><a href="#Parser-3471"><span class="linenos">3471</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">):</span>
-</span><span id="Parser-3472"><a href="#Parser-3472"><span class="linenos">3472</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
-</span><span id="Parser-3473"><a href="#Parser-3473"><span class="linenos">3473</span></a>
-</span><span id="Parser-3474"><a href="#Parser-3474"><span class="linenos">3474</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
-</span><span id="Parser-3475"><a href="#Parser-3475"><span class="linenos">3475</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
-</span><span id="Parser-3476"><a href="#Parser-3476"><span class="linenos">3476</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOTNULL</span><span class="p">):</span>
-</span><span id="Parser-3477"><a href="#Parser-3477"><span class="linenos">3477</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
-</span><span id="Parser-3478"><a href="#Parser-3478"><span class="linenos">3478</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3479"><a href="#Parser-3479"><span class="linenos">3479</span></a>
-</span><span id="Parser-3480"><a href="#Parser-3480"><span class="linenos">3480</span></a> <span class="k">if</span> <span class="n">negate</span><span class="p">:</span>
-</span><span id="Parser-3481"><a href="#Parser-3481"><span class="linenos">3481</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3482"><a href="#Parser-3482"><span class="linenos">3482</span></a>
-</span><span id="Parser-3483"><a href="#Parser-3483"><span class="linenos">3483</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">):</span>
-</span><span id="Parser-3484"><a href="#Parser-3484"><span class="linenos">3484</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_is</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3485"><a href="#Parser-3485"><span class="linenos">3485</span></a>
-</span><span id="Parser-3486"><a href="#Parser-3486"><span class="linenos">3486</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3487"><a href="#Parser-3487"><span class="linenos">3487</span></a>
-</span><span id="Parser-3488"><a href="#Parser-3488"><span class="linenos">3488</span></a> <span class="k">def</span> <span class="nf">_parse_is</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3489"><a href="#Parser-3489"><span class="linenos">3489</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="Parser-3490"><a href="#Parser-3490"><span class="linenos">3490</span></a> <span class="n">negate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
-</span><span id="Parser-3491"><a href="#Parser-3491"><span class="linenos">3491</span></a>
-</span><span id="Parser-3492"><a href="#Parser-3492"><span class="linenos">3492</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">):</span>
-</span><span id="Parser-3493"><a href="#Parser-3493"><span class="linenos">3493</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span> <span class="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeNEQ</span>
-</span><span id="Parser-3494"><a href="#Parser-3494"><span class="linenos">3494</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">klass</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="Parser-3495"><a href="#Parser-3495"><span class="linenos">3495</span></a>
-</span><span id="Parser-3496"><a href="#Parser-3496"><span class="linenos">3496</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_null</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_boolean</span><span class="p">()</span>
-</span><span id="Parser-3497"><a href="#Parser-3497"><span class="linenos">3497</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Parser-3498"><a href="#Parser-3498"><span class="linenos">3498</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-3499"><a href="#Parser-3499"><span class="linenos">3499</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3500"><a href="#Parser-3500"><span class="linenos">3500</span></a>
-</span><span id="Parser-3501"><a href="#Parser-3501"><span class="linenos">3501</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Parser-3502"><a href="#Parser-3502"><span class="linenos">3502</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">this</span>
-</span><span id="Parser-3503"><a href="#Parser-3503"><span class="linenos">3503</span></a>
-</span><span id="Parser-3504"><a href="#Parser-3504"><span class="linenos">3504</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
-</span><span id="Parser-3505"><a href="#Parser-3505"><span class="linenos">3505</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">(</span><span class="n">with_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-3506"><a href="#Parser-3506"><span class="linenos">3506</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
-</span><span id="Parser-3507"><a href="#Parser-3507"><span class="linenos">3507</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unnest</span><span class="o">=</span><span class="n">unnest</span><span class="p">)</span>
-</span><span id="Parser-3508"><a href="#Parser-3508"><span class="linenos">3508</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">)):</span>
-</span><span id="Parser-3509"><a href="#Parser-3509"><span class="linenos">3509</span></a> <span class="n">matched_l_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span>
-</span><span id="Parser-3510"><a href="#Parser-3510"><span class="linenos">3510</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
-</span><span id="Parser-3511"><a href="#Parser-3511"><span class="linenos">3511</span></a>
-</span><span id="Parser-3512"><a href="#Parser-3512"><span class="linenos">3512</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
-</span><span id="Parser-3513"><a href="#Parser-3513"><span class="linenos">3513</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">query</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-</span><span id="Parser-3514"><a href="#Parser-3514"><span class="linenos">3514</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3515"><a href="#Parser-3515"><span class="linenos">3515</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-3516"><a href="#Parser-3516"><span class="linenos">3516</span></a>
-</span><span id="Parser-3517"><a href="#Parser-3517"><span class="linenos">3517</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
-</span><span id="Parser-3518"><a href="#Parser-3518"><span class="linenos">3518</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3519"><a href="#Parser-3519"><span class="linenos">3519</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">):</span>
-</span><span id="Parser-3520"><a href="#Parser-3520"><span class="linenos">3520</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting ]&quot;</span><span class="p">)</span>
-</span><span id="Parser-3521"><a href="#Parser-3521"><span class="linenos">3521</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3522"><a href="#Parser-3522"><span class="linenos">3522</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">field</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
-</span><span id="Parser-3523"><a href="#Parser-3523"><span class="linenos">3523</span></a>
-</span><span id="Parser-3524"><a href="#Parser-3524"><span class="linenos">3524</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3525"><a href="#Parser-3525"><span class="linenos">3525</span></a>
-</span><span id="Parser-3526"><a href="#Parser-3526"><span class="linenos">3526</span></a> <span class="k">def</span> <span class="nf">_parse_between</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">:</span>
-</span><span id="Parser-3527"><a href="#Parser-3527"><span class="linenos">3527</span></a> <span class="n">low</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-3528"><a href="#Parser-3528"><span class="linenos">3528</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span>
-</span><span id="Parser-3529"><a href="#Parser-3529"><span class="linenos">3529</span></a> <span class="n">high</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-3530"><a href="#Parser-3530"><span class="linenos">3530</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">low</span><span class="o">=</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="o">=</span><span class="n">high</span><span class="p">)</span>
-</span><span id="Parser-3531"><a href="#Parser-3531"><span class="linenos">3531</span></a>
-</span><span id="Parser-3532"><a href="#Parser-3532"><span class="linenos">3532</span></a> <span class="k">def</span> <span class="nf">_parse_escape</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3533"><a href="#Parser-3533"><span class="linenos">3533</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">):</span>
-</span><span id="Parser-3534"><a href="#Parser-3534"><span class="linenos">3534</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3535"><a href="#Parser-3535"><span class="linenos">3535</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Escape</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="Parser-3536"><a href="#Parser-3536"><span class="linenos">3536</span></a>
-</span><span id="Parser-3537"><a href="#Parser-3537"><span class="linenos">3537</span></a> <span class="k">def</span> <span class="nf">_parse_interval</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">]:</span>
-</span><span id="Parser-3538"><a href="#Parser-3538"><span class="linenos">3538</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3539"><a href="#Parser-3539"><span class="linenos">3539</span></a>
-</span><span id="Parser-3540"><a href="#Parser-3540"><span class="linenos">3540</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">)</span> <span class="ow">and</span> <span class="n">match_interval</span><span class="p">:</span>
-</span><span id="Parser-3541"><a href="#Parser-3541"><span class="linenos">3541</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3458"><a href="#Parser-3458"><span class="linenos">3458</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Parser-3459"><a href="#Parser-3459"><span class="linenos">3459</span></a> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNION_MODIFIERS</span><span class="p">:</span>
+</span><span id="Parser-3460"><a href="#Parser-3460"><span class="linenos">3460</span></a> <span class="n">expr</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
+</span><span id="Parser-3461"><a href="#Parser-3461"><span class="linenos">3461</span></a> <span class="k">if</span> <span class="n">expr</span><span class="p">:</span>
+</span><span id="Parser-3462"><a href="#Parser-3462"><span class="linenos">3462</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">expr</span><span class="o">.</span><span class="n">pop</span><span class="p">())</span>
+</span><span id="Parser-3463"><a href="#Parser-3463"><span class="linenos">3463</span></a>
+</span><span id="Parser-3464"><a href="#Parser-3464"><span class="linenos">3464</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3465"><a href="#Parser-3465"><span class="linenos">3465</span></a>
+</span><span id="Parser-3466"><a href="#Parser-3466"><span class="linenos">3466</span></a> <span class="k">def</span> <span class="nf">_parse_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3467"><a href="#Parser-3467"><span class="linenos">3467</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="Parser-3468"><a href="#Parser-3468"><span class="linenos">3468</span></a>
+</span><span id="Parser-3469"><a href="#Parser-3469"><span class="linenos">3469</span></a> <span class="k">def</span> <span class="nf">_parse_conjunction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3470"><a href="#Parser-3470"><span class="linenos">3470</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONJUNCTION</span><span class="p">)</span>
+</span><span id="Parser-3471"><a href="#Parser-3471"><span class="linenos">3471</span></a>
+</span><span id="Parser-3472"><a href="#Parser-3472"><span class="linenos">3472</span></a> <span class="k">def</span> <span class="nf">_parse_equality</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3473"><a href="#Parser-3473"><span class="linenos">3473</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_comparison</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EQUALITY</span><span class="p">)</span>
+</span><span id="Parser-3474"><a href="#Parser-3474"><span class="linenos">3474</span></a>
+</span><span id="Parser-3475"><a href="#Parser-3475"><span class="linenos">3475</span></a> <span class="k">def</span> <span class="nf">_parse_comparison</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3476"><a href="#Parser-3476"><span class="linenos">3476</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_range</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">COMPARISON</span><span class="p">)</span>
+</span><span id="Parser-3477"><a href="#Parser-3477"><span class="linenos">3477</span></a>
+</span><span id="Parser-3478"><a href="#Parser-3478"><span class="linenos">3478</span></a> <span class="k">def</span> <span class="nf">_parse_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3479"><a href="#Parser-3479"><span class="linenos">3479</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-3480"><a href="#Parser-3480"><span class="linenos">3480</span></a> <span class="n">negate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
+</span><span id="Parser-3481"><a href="#Parser-3481"><span class="linenos">3481</span></a>
+</span><span id="Parser-3482"><a href="#Parser-3482"><span class="linenos">3482</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">):</span>
+</span><span id="Parser-3483"><a href="#Parser-3483"><span class="linenos">3483</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">RANGE_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3484"><a href="#Parser-3484"><span class="linenos">3484</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Parser-3485"><a href="#Parser-3485"><span class="linenos">3485</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3486"><a href="#Parser-3486"><span class="linenos">3486</span></a>
+</span><span id="Parser-3487"><a href="#Parser-3487"><span class="linenos">3487</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">expression</span>
+</span><span id="Parser-3488"><a href="#Parser-3488"><span class="linenos">3488</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ISNULL</span><span class="p">):</span>
+</span><span id="Parser-3489"><a href="#Parser-3489"><span class="linenos">3489</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
+</span><span id="Parser-3490"><a href="#Parser-3490"><span class="linenos">3490</span></a>
+</span><span id="Parser-3491"><a href="#Parser-3491"><span class="linenos">3491</span></a> <span class="c1"># Postgres supports ISNULL and NOTNULL for conditions.</span>
+</span><span id="Parser-3492"><a href="#Parser-3492"><span class="linenos">3492</span></a> <span class="c1"># https://blog.andreiavram.ro/postgresql-null-composite-type/</span>
+</span><span id="Parser-3493"><a href="#Parser-3493"><span class="linenos">3493</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOTNULL</span><span class="p">):</span>
+</span><span id="Parser-3494"><a href="#Parser-3494"><span class="linenos">3494</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">())</span>
+</span><span id="Parser-3495"><a href="#Parser-3495"><span class="linenos">3495</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3496"><a href="#Parser-3496"><span class="linenos">3496</span></a>
+</span><span id="Parser-3497"><a href="#Parser-3497"><span class="linenos">3497</span></a> <span class="k">if</span> <span class="n">negate</span><span class="p">:</span>
+</span><span id="Parser-3498"><a href="#Parser-3498"><span class="linenos">3498</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3499"><a href="#Parser-3499"><span class="linenos">3499</span></a>
+</span><span id="Parser-3500"><a href="#Parser-3500"><span class="linenos">3500</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IS</span><span class="p">):</span>
+</span><span id="Parser-3501"><a href="#Parser-3501"><span class="linenos">3501</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_is</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3502"><a href="#Parser-3502"><span class="linenos">3502</span></a>
+</span><span id="Parser-3503"><a href="#Parser-3503"><span class="linenos">3503</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3504"><a href="#Parser-3504"><span class="linenos">3504</span></a>
+</span><span id="Parser-3505"><a href="#Parser-3505"><span class="linenos">3505</span></a> <span class="k">def</span> <span class="nf">_parse_is</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3506"><a href="#Parser-3506"><span class="linenos">3506</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="Parser-3507"><a href="#Parser-3507"><span class="linenos">3507</span></a> <span class="n">negate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
+</span><span id="Parser-3508"><a href="#Parser-3508"><span class="linenos">3508</span></a>
+</span><span id="Parser-3509"><a href="#Parser-3509"><span class="linenos">3509</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DISTINCT&quot;</span><span class="p">,</span> <span class="s2">&quot;FROM&quot;</span><span class="p">):</span>
+</span><span id="Parser-3510"><a href="#Parser-3510"><span class="linenos">3510</span></a> <span class="n">klass</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeEQ</span> <span class="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">NullSafeNEQ</span>
+</span><span id="Parser-3511"><a href="#Parser-3511"><span class="linenos">3511</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">klass</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="Parser-3512"><a href="#Parser-3512"><span class="linenos">3512</span></a>
+</span><span id="Parser-3513"><a href="#Parser-3513"><span class="linenos">3513</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_null</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_boolean</span><span class="p">()</span>
+</span><span id="Parser-3514"><a href="#Parser-3514"><span class="linenos">3514</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Parser-3515"><a href="#Parser-3515"><span class="linenos">3515</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3516"><a href="#Parser-3516"><span class="linenos">3516</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3517"><a href="#Parser-3517"><span class="linenos">3517</span></a>
+</span><span id="Parser-3518"><a href="#Parser-3518"><span class="linenos">3518</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Parser-3519"><a href="#Parser-3519"><span class="linenos">3519</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Not</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">negate</span> <span class="k">else</span> <span class="n">this</span>
+</span><span id="Parser-3520"><a href="#Parser-3520"><span class="linenos">3520</span></a>
+</span><span id="Parser-3521"><a href="#Parser-3521"><span class="linenos">3521</span></a> <span class="k">def</span> <span class="nf">_parse_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">:</span>
+</span><span id="Parser-3522"><a href="#Parser-3522"><span class="linenos">3522</span></a> <span class="n">unnest</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnest</span><span class="p">(</span><span class="n">with_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3523"><a href="#Parser-3523"><span class="linenos">3523</span></a> <span class="k">if</span> <span class="n">unnest</span><span class="p">:</span>
+</span><span id="Parser-3524"><a href="#Parser-3524"><span class="linenos">3524</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unnest</span><span class="o">=</span><span class="n">unnest</span><span class="p">)</span>
+</span><span id="Parser-3525"><a href="#Parser-3525"><span class="linenos">3525</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">)):</span>
+</span><span id="Parser-3526"><a href="#Parser-3526"><span class="linenos">3526</span></a> <span class="n">matched_l_paren</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span>
+</span><span id="Parser-3527"><a href="#Parser-3527"><span class="linenos">3527</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="Parser-3528"><a href="#Parser-3528"><span class="linenos">3528</span></a>
+</span><span id="Parser-3529"><a href="#Parser-3529"><span class="linenos">3529</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="Parser-3530"><a href="#Parser-3530"><span class="linenos">3530</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">query</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="Parser-3531"><a href="#Parser-3531"><span class="linenos">3531</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3532"><a href="#Parser-3532"><span class="linenos">3532</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-3533"><a href="#Parser-3533"><span class="linenos">3533</span></a>
+</span><span id="Parser-3534"><a href="#Parser-3534"><span class="linenos">3534</span></a> <span class="k">if</span> <span class="n">matched_l_paren</span><span class="p">:</span>
+</span><span id="Parser-3535"><a href="#Parser-3535"><span class="linenos">3535</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3536"><a href="#Parser-3536"><span class="linenos">3536</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">):</span>
+</span><span id="Parser-3537"><a href="#Parser-3537"><span class="linenos">3537</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting ]&quot;</span><span class="p">)</span>
+</span><span id="Parser-3538"><a href="#Parser-3538"><span class="linenos">3538</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3539"><a href="#Parser-3539"><span class="linenos">3539</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">In</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">field</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
+</span><span id="Parser-3540"><a href="#Parser-3540"><span class="linenos">3540</span></a>
+</span><span id="Parser-3541"><a href="#Parser-3541"><span class="linenos">3541</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3542"><a href="#Parser-3542"><span class="linenos">3542</span></a>
-</span><span id="Parser-3543"><a href="#Parser-3543"><span class="linenos">3543</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-3544"><a href="#Parser-3544"><span class="linenos">3544</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-3545"><a href="#Parser-3545"><span class="linenos">3545</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3546"><a href="#Parser-3546"><span class="linenos">3546</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="Parser-3547"><a href="#Parser-3547"><span class="linenos">3547</span></a>
-</span><span id="Parser-3548"><a href="#Parser-3548"><span class="linenos">3548</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="Parser-3549"><a href="#Parser-3549"><span class="linenos">3549</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span>
-</span><span id="Parser-3550"><a href="#Parser-3550"><span class="linenos">3550</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">table</span>
-</span><span id="Parser-3551"><a href="#Parser-3551"><span class="linenos">3551</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span>
-</span><span id="Parser-3552"><a href="#Parser-3552"><span class="linenos">3552</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;IS&quot;</span>
-</span><span id="Parser-3553"><a href="#Parser-3553"><span class="linenos">3553</span></a> <span class="p">):</span>
-</span><span id="Parser-3554"><a href="#Parser-3554"><span class="linenos">3554</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-3555"><a href="#Parser-3555"><span class="linenos">3555</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3543"><a href="#Parser-3543"><span class="linenos">3543</span></a> <span class="k">def</span> <span class="nf">_parse_between</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">:</span>
+</span><span id="Parser-3544"><a href="#Parser-3544"><span class="linenos">3544</span></a> <span class="n">low</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-3545"><a href="#Parser-3545"><span class="linenos">3545</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span>
+</span><span id="Parser-3546"><a href="#Parser-3546"><span class="linenos">3546</span></a> <span class="n">high</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-3547"><a href="#Parser-3547"><span class="linenos">3547</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Between</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">low</span><span class="o">=</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="o">=</span><span class="n">high</span><span class="p">)</span>
+</span><span id="Parser-3548"><a href="#Parser-3548"><span class="linenos">3548</span></a>
+</span><span id="Parser-3549"><a href="#Parser-3549"><span class="linenos">3549</span></a> <span class="k">def</span> <span class="nf">_parse_escape</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3550"><a href="#Parser-3550"><span class="linenos">3550</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ESCAPE</span><span class="p">):</span>
+</span><span id="Parser-3551"><a href="#Parser-3551"><span class="linenos">3551</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3552"><a href="#Parser-3552"><span class="linenos">3552</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Escape</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="Parser-3553"><a href="#Parser-3553"><span class="linenos">3553</span></a>
+</span><span id="Parser-3554"><a href="#Parser-3554"><span class="linenos">3554</span></a> <span class="k">def</span> <span class="nf">_parse_interval</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">]:</span>
+</span><span id="Parser-3555"><a href="#Parser-3555"><span class="linenos">3555</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-3556"><a href="#Parser-3556"><span class="linenos">3556</span></a>
-</span><span id="Parser-3557"><a href="#Parser-3557"><span class="linenos">3557</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="Parser-3558"><a href="#Parser-3558"><span class="linenos">3558</span></a> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-3559"><a href="#Parser-3559"><span class="linenos">3559</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-3560"><a href="#Parser-3560"><span class="linenos">3560</span></a> <span class="p">)</span>
-</span><span id="Parser-3561"><a href="#Parser-3561"><span class="linenos">3561</span></a>
-</span><span id="Parser-3562"><a href="#Parser-3562"><span class="linenos">3562</span></a> <span class="c1"># Most dialects support, e.g., the form INTERVAL &#39;5&#39; day, thus we try to parse</span>
-</span><span id="Parser-3563"><a href="#Parser-3563"><span class="linenos">3563</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
-</span><span id="Parser-3564"><a href="#Parser-3564"><span class="linenos">3564</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
-</span><span id="Parser-3565"><a href="#Parser-3565"><span class="linenos">3565</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Parser-3566"><a href="#Parser-3566"><span class="linenos">3566</span></a> <span class="k">elif</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
-</span><span id="Parser-3567"><a href="#Parser-3567"><span class="linenos">3567</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
-</span><span id="Parser-3568"><a href="#Parser-3568"><span class="linenos">3568</span></a>
-</span><span id="Parser-3569"><a href="#Parser-3569"><span class="linenos">3569</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
-</span><span id="Parser-3570"><a href="#Parser-3570"><span class="linenos">3570</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="Parser-3571"><a href="#Parser-3571"><span class="linenos">3571</span></a> <span class="c1"># This is not actually a unit, it&#39;s something else (e.g. a &quot;window side&quot;)</span>
-</span><span id="Parser-3572"><a href="#Parser-3572"><span class="linenos">3572</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3573"><a href="#Parser-3573"><span class="linenos">3573</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-3574"><a href="#Parser-3574"><span class="linenos">3574</span></a>
-</span><span id="Parser-3575"><a href="#Parser-3575"><span class="linenos">3575</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
-</span><span id="Parser-3576"><a href="#Parser-3576"><span class="linenos">3576</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Parser-3577"><a href="#Parser-3577"><span class="linenos">3577</span></a>
-</span><span id="Parser-3578"><a href="#Parser-3578"><span class="linenos">3578</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
-</span><span id="Parser-3579"><a href="#Parser-3579"><span class="linenos">3579</span></a>
-</span><span id="Parser-3580"><a href="#Parser-3580"><span class="linenos">3580</span></a> <span class="k">def</span> <span class="nf">_parse_bitwise</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3581"><a href="#Parser-3581"><span class="linenos">3581</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="Parser-3582"><a href="#Parser-3582"><span class="linenos">3582</span></a>
-</span><span id="Parser-3583"><a href="#Parser-3583"><span class="linenos">3583</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-3584"><a href="#Parser-3584"><span class="linenos">3584</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">):</span>
-</span><span id="Parser-3585"><a href="#Parser-3585"><span class="linenos">3585</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3586"><a href="#Parser-3586"><span class="linenos">3586</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
-</span><span id="Parser-3587"><a href="#Parser-3587"><span class="linenos">3587</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3588"><a href="#Parser-3588"><span class="linenos">3588</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
-</span><span id="Parser-3589"><a href="#Parser-3589"><span class="linenos">3589</span></a> <span class="p">)</span>
-</span><span id="Parser-3590"><a href="#Parser-3590"><span class="linenos">3590</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">):</span>
-</span><span id="Parser-3591"><a href="#Parser-3591"><span class="linenos">3591</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3592"><a href="#Parser-3592"><span class="linenos">3592</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">,</span>
-</span><span id="Parser-3593"><a href="#Parser-3593"><span class="linenos">3593</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3594"><a href="#Parser-3594"><span class="linenos">3594</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
-</span><span id="Parser-3595"><a href="#Parser-3595"><span class="linenos">3595</span></a> <span class="n">safe</span><span class="o">=</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">,</span>
-</span><span id="Parser-3596"><a href="#Parser-3596"><span class="linenos">3596</span></a> <span class="p">)</span>
-</span><span id="Parser-3597"><a href="#Parser-3597"><span class="linenos">3597</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">):</span>
-</span><span id="Parser-3598"><a href="#Parser-3598"><span class="linenos">3598</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
-</span><span id="Parser-3599"><a href="#Parser-3599"><span class="linenos">3599</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
-</span><span id="Parser-3600"><a href="#Parser-3600"><span class="linenos">3600</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3601"><a href="#Parser-3601"><span class="linenos">3601</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
-</span><span id="Parser-3602"><a href="#Parser-3602"><span class="linenos">3602</span></a> <span class="p">)</span>
-</span><span id="Parser-3603"><a href="#Parser-3603"><span class="linenos">3603</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
-</span><span id="Parser-3604"><a href="#Parser-3604"><span class="linenos">3604</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3605"><a href="#Parser-3605"><span class="linenos">3605</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3557"><a href="#Parser-3557"><span class="linenos">3557</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">)</span> <span class="ow">and</span> <span class="n">match_interval</span><span class="p">:</span>
+</span><span id="Parser-3558"><a href="#Parser-3558"><span class="linenos">3558</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3559"><a href="#Parser-3559"><span class="linenos">3559</span></a>
+</span><span id="Parser-3560"><a href="#Parser-3560"><span class="linenos">3560</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-3561"><a href="#Parser-3561"><span class="linenos">3561</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-3562"><a href="#Parser-3562"><span class="linenos">3562</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3563"><a href="#Parser-3563"><span class="linenos">3563</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3564"><a href="#Parser-3564"><span class="linenos">3564</span></a>
+</span><span id="Parser-3565"><a href="#Parser-3565"><span class="linenos">3565</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="Parser-3566"><a href="#Parser-3566"><span class="linenos">3566</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span>
+</span><span id="Parser-3567"><a href="#Parser-3567"><span class="linenos">3567</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">table</span>
+</span><span id="Parser-3568"><a href="#Parser-3568"><span class="linenos">3568</span></a> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">quoted</span>
+</span><span id="Parser-3569"><a href="#Parser-3569"><span class="linenos">3569</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;IS&quot;</span>
+</span><span id="Parser-3570"><a href="#Parser-3570"><span class="linenos">3570</span></a> <span class="p">):</span>
+</span><span id="Parser-3571"><a href="#Parser-3571"><span class="linenos">3571</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3572"><a href="#Parser-3572"><span class="linenos">3572</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3573"><a href="#Parser-3573"><span class="linenos">3573</span></a>
+</span><span id="Parser-3574"><a href="#Parser-3574"><span class="linenos">3574</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="Parser-3575"><a href="#Parser-3575"><span class="linenos">3575</span></a> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3576"><a href="#Parser-3576"><span class="linenos">3576</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3577"><a href="#Parser-3577"><span class="linenos">3577</span></a> <span class="p">)</span>
+</span><span id="Parser-3578"><a href="#Parser-3578"><span class="linenos">3578</span></a>
+</span><span id="Parser-3579"><a href="#Parser-3579"><span class="linenos">3579</span></a> <span class="c1"># Most dialects support, e.g., the form INTERVAL &#39;5&#39; day, thus we try to parse</span>
+</span><span id="Parser-3580"><a href="#Parser-3580"><span class="linenos">3580</span></a> <span class="c1"># each INTERVAL expression into this canonical form so it&#39;s easy to transpile</span>
+</span><span id="Parser-3581"><a href="#Parser-3581"><span class="linenos">3581</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_number</span><span class="p">:</span>
+</span><span id="Parser-3582"><a href="#Parser-3582"><span class="linenos">3582</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="Parser-3583"><a href="#Parser-3583"><span class="linenos">3583</span></a> <span class="k">elif</span> <span class="n">this</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_string</span><span class="p">:</span>
+</span><span id="Parser-3584"><a href="#Parser-3584"><span class="linenos">3584</span></a> <span class="n">parts</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
+</span><span id="Parser-3585"><a href="#Parser-3585"><span class="linenos">3585</span></a>
+</span><span id="Parser-3586"><a href="#Parser-3586"><span class="linenos">3586</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
+</span><span id="Parser-3587"><a href="#Parser-3587"><span class="linenos">3587</span></a> <span class="k">if</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="Parser-3588"><a href="#Parser-3588"><span class="linenos">3588</span></a> <span class="c1"># This is not actually a unit, it&#39;s something else (e.g. a &quot;window side&quot;)</span>
+</span><span id="Parser-3589"><a href="#Parser-3589"><span class="linenos">3589</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3590"><a href="#Parser-3590"><span class="linenos">3590</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-3591"><a href="#Parser-3591"><span class="linenos">3591</span></a>
+</span><span id="Parser-3592"><a href="#Parser-3592"><span class="linenos">3592</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
+</span><span id="Parser-3593"><a href="#Parser-3593"><span class="linenos">3593</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="Parser-3594"><a href="#Parser-3594"><span class="linenos">3594</span></a>
+</span><span id="Parser-3595"><a href="#Parser-3595"><span class="linenos">3595</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">)</span>
+</span><span id="Parser-3596"><a href="#Parser-3596"><span class="linenos">3596</span></a>
+</span><span id="Parser-3597"><a href="#Parser-3597"><span class="linenos">3597</span></a> <span class="k">def</span> <span class="nf">_parse_bitwise</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3598"><a href="#Parser-3598"><span class="linenos">3598</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3599"><a href="#Parser-3599"><span class="linenos">3599</span></a>
+</span><span id="Parser-3600"><a href="#Parser-3600"><span class="linenos">3600</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-3601"><a href="#Parser-3601"><span class="linenos">3601</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">):</span>
+</span><span id="Parser-3602"><a href="#Parser-3602"><span class="linenos">3602</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3603"><a href="#Parser-3603"><span class="linenos">3603</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">BITWISE</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
+</span><span id="Parser-3604"><a href="#Parser-3604"><span class="linenos">3604</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3605"><a href="#Parser-3605"><span class="linenos">3605</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
</span><span id="Parser-3606"><a href="#Parser-3606"><span class="linenos">3606</span></a> <span class="p">)</span>
-</span><span id="Parser-3607"><a href="#Parser-3607"><span class="linenos">3607</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3608"><a href="#Parser-3608"><span class="linenos">3608</span></a> <span class="k">break</span>
-</span><span id="Parser-3609"><a href="#Parser-3609"><span class="linenos">3609</span></a>
-</span><span id="Parser-3610"><a href="#Parser-3610"><span class="linenos">3610</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3611"><a href="#Parser-3611"><span class="linenos">3611</span></a>
-</span><span id="Parser-3612"><a href="#Parser-3612"><span class="linenos">3612</span></a> <span class="k">def</span> <span class="nf">_parse_term</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3613"><a href="#Parser-3613"><span class="linenos">3613</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">TERM</span><span class="p">)</span>
-</span><span id="Parser-3614"><a href="#Parser-3614"><span class="linenos">3614</span></a>
-</span><span id="Parser-3615"><a href="#Parser-3615"><span class="linenos">3615</span></a> <span class="k">def</span> <span class="nf">_parse_factor</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3616"><a href="#Parser-3616"><span class="linenos">3616</span></a> <span class="n">parse_method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exponent</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span>
-</span><span id="Parser-3617"><a href="#Parser-3617"><span class="linenos">3617</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="Parser-3618"><a href="#Parser-3618"><span class="linenos">3618</span></a>
-</span><span id="Parser-3619"><a href="#Parser-3619"><span class="linenos">3619</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">):</span>
-</span><span id="Parser-3620"><a href="#Parser-3620"><span class="linenos">3620</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3621"><a href="#Parser-3621"><span class="linenos">3621</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
-</span><span id="Parser-3622"><a href="#Parser-3622"><span class="linenos">3622</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3623"><a href="#Parser-3623"><span class="linenos">3623</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
-</span><span id="Parser-3624"><a href="#Parser-3624"><span class="linenos">3624</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
-</span><span id="Parser-3625"><a href="#Parser-3625"><span class="linenos">3625</span></a> <span class="p">)</span>
-</span><span id="Parser-3626"><a href="#Parser-3626"><span class="linenos">3626</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">Div</span><span class="p">):</span>
-</span><span id="Parser-3627"><a href="#Parser-3627"><span class="linenos">3627</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;typed&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span>
-</span><span id="Parser-3628"><a href="#Parser-3628"><span class="linenos">3628</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;safe&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span>
-</span><span id="Parser-3629"><a href="#Parser-3629"><span class="linenos">3629</span></a>
-</span><span id="Parser-3630"><a href="#Parser-3630"><span class="linenos">3630</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3607"><a href="#Parser-3607"><span class="linenos">3607</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">):</span>
+</span><span id="Parser-3608"><a href="#Parser-3608"><span class="linenos">3608</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3609"><a href="#Parser-3609"><span class="linenos">3609</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DPipe</span><span class="p">,</span>
+</span><span id="Parser-3610"><a href="#Parser-3610"><span class="linenos">3610</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3611"><a href="#Parser-3611"><span class="linenos">3611</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
+</span><span id="Parser-3612"><a href="#Parser-3612"><span class="linenos">3612</span></a> <span class="n">safe</span><span class="o">=</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">STRICT_STRING_CONCAT</span><span class="p">,</span>
+</span><span id="Parser-3613"><a href="#Parser-3613"><span class="linenos">3613</span></a> <span class="p">)</span>
+</span><span id="Parser-3614"><a href="#Parser-3614"><span class="linenos">3614</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DQMARK</span><span class="p">):</span>
+</span><span id="Parser-3615"><a href="#Parser-3615"><span class="linenos">3615</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Coalesce</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">())</span>
+</span><span id="Parser-3616"><a href="#Parser-3616"><span class="linenos">3616</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
+</span><span id="Parser-3617"><a href="#Parser-3617"><span class="linenos">3617</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3618"><a href="#Parser-3618"><span class="linenos">3618</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3619"><a href="#Parser-3619"><span class="linenos">3619</span></a> <span class="p">)</span>
+</span><span id="Parser-3620"><a href="#Parser-3620"><span class="linenos">3620</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
+</span><span id="Parser-3621"><a href="#Parser-3621"><span class="linenos">3621</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3622"><a href="#Parser-3622"><span class="linenos">3622</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">()</span>
+</span><span id="Parser-3623"><a href="#Parser-3623"><span class="linenos">3623</span></a> <span class="p">)</span>
+</span><span id="Parser-3624"><a href="#Parser-3624"><span class="linenos">3624</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3625"><a href="#Parser-3625"><span class="linenos">3625</span></a> <span class="k">break</span>
+</span><span id="Parser-3626"><a href="#Parser-3626"><span class="linenos">3626</span></a>
+</span><span id="Parser-3627"><a href="#Parser-3627"><span class="linenos">3627</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3628"><a href="#Parser-3628"><span class="linenos">3628</span></a>
+</span><span id="Parser-3629"><a href="#Parser-3629"><span class="linenos">3629</span></a> <span class="k">def</span> <span class="nf">_parse_term</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3630"><a href="#Parser-3630"><span class="linenos">3630</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_factor</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">TERM</span><span class="p">)</span>
</span><span id="Parser-3631"><a href="#Parser-3631"><span class="linenos">3631</span></a>
-</span><span id="Parser-3632"><a href="#Parser-3632"><span class="linenos">3632</span></a> <span class="k">def</span> <span class="nf">_parse_exponent</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3633"><a href="#Parser-3633"><span class="linenos">3633</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
-</span><span id="Parser-3634"><a href="#Parser-3634"><span class="linenos">3634</span></a>
-</span><span id="Parser-3635"><a href="#Parser-3635"><span class="linenos">3635</span></a> <span class="k">def</span> <span class="nf">_parse_unary</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3636"><a href="#Parser-3636"><span class="linenos">3636</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">):</span>
-</span><span id="Parser-3637"><a href="#Parser-3637"><span class="linenos">3637</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Parser-3638"><a href="#Parser-3638"><span class="linenos">3638</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">())</span>
-</span><span id="Parser-3639"><a href="#Parser-3639"><span class="linenos">3639</span></a>
-</span><span id="Parser-3640"><a href="#Parser-3640"><span class="linenos">3640</span></a> <span class="k">def</span> <span class="nf">_parse_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3641"><a href="#Parser-3641"><span class="linenos">3641</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">parse_interval</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">()</span>
-</span><span id="Parser-3642"><a href="#Parser-3642"><span class="linenos">3642</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
-</span><span id="Parser-3643"><a href="#Parser-3643"><span class="linenos">3643</span></a> <span class="c1"># Convert INTERVAL &#39;val_1&#39; unit_1 ... &#39;val_n&#39; unit_n into a sum of intervals</span>
-</span><span id="Parser-3644"><a href="#Parser-3644"><span class="linenos">3644</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-3645"><a href="#Parser-3645"><span class="linenos">3645</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-3646"><a href="#Parser-3646"><span class="linenos">3646</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">(</span><span class="n">match_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-3647"><a href="#Parser-3647"><span class="linenos">3647</span></a> <span class="p">)</span>
+</span><span id="Parser-3632"><a href="#Parser-3632"><span class="linenos">3632</span></a> <span class="k">def</span> <span class="nf">_parse_factor</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3633"><a href="#Parser-3633"><span class="linenos">3633</span></a> <span class="n">parse_method</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exponent</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span>
+</span><span id="Parser-3634"><a href="#Parser-3634"><span class="linenos">3634</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="Parser-3635"><a href="#Parser-3635"><span class="linenos">3635</span></a>
+</span><span id="Parser-3636"><a href="#Parser-3636"><span class="linenos">3636</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">):</span>
+</span><span id="Parser-3637"><a href="#Parser-3637"><span class="linenos">3637</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3638"><a href="#Parser-3638"><span class="linenos">3638</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">FACTOR</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
+</span><span id="Parser-3639"><a href="#Parser-3639"><span class="linenos">3639</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3640"><a href="#Parser-3640"><span class="linenos">3640</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
+</span><span id="Parser-3641"><a href="#Parser-3641"><span class="linenos">3641</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
+</span><span id="Parser-3642"><a href="#Parser-3642"><span class="linenos">3642</span></a> <span class="p">)</span>
+</span><span id="Parser-3643"><a href="#Parser-3643"><span class="linenos">3643</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">Div</span><span class="p">):</span>
+</span><span id="Parser-3644"><a href="#Parser-3644"><span class="linenos">3644</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;typed&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TYPED_DIVISION</span>
+</span><span id="Parser-3645"><a href="#Parser-3645"><span class="linenos">3645</span></a> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;safe&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SAFE_DIVISION</span>
+</span><span id="Parser-3646"><a href="#Parser-3646"><span class="linenos">3646</span></a>
+</span><span id="Parser-3647"><a href="#Parser-3647"><span class="linenos">3647</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3648"><a href="#Parser-3648"><span class="linenos">3648</span></a>
-</span><span id="Parser-3649"><a href="#Parser-3649"><span class="linenos">3649</span></a> <span class="k">return</span> <span class="n">interval</span>
-</span><span id="Parser-3650"><a href="#Parser-3650"><span class="linenos">3650</span></a>
-</span><span id="Parser-3651"><a href="#Parser-3651"><span class="linenos">3651</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3652"><a href="#Parser-3652"><span class="linenos">3652</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-3653"><a href="#Parser-3653"><span class="linenos">3653</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-3654"><a href="#Parser-3654"><span class="linenos">3654</span></a>
-</span><span id="Parser-3655"><a href="#Parser-3655"><span class="linenos">3655</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
-</span><span id="Parser-3656"><a href="#Parser-3656"><span class="linenos">3656</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="Parser-3657"><a href="#Parser-3657"><span class="linenos">3657</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_LITERAL_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">data_type</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3658"><a href="#Parser-3658"><span class="linenos">3658</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Parser-3659"><a href="#Parser-3659"><span class="linenos">3659</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">data_type</span><span class="p">)</span>
-</span><span id="Parser-3660"><a href="#Parser-3660"><span class="linenos">3660</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">data_type</span><span class="p">)</span>
-</span><span id="Parser-3661"><a href="#Parser-3661"><span class="linenos">3661</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data_type</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-3662"><a href="#Parser-3662"><span class="linenos">3662</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-3663"><a href="#Parser-3663"><span class="linenos">3663</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-3664"><a href="#Parser-3664"><span class="linenos">3664</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
+</span><span id="Parser-3649"><a href="#Parser-3649"><span class="linenos">3649</span></a> <span class="k">def</span> <span class="nf">_parse_exponent</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3650"><a href="#Parser-3650"><span class="linenos">3650</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_tokens</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">EXPONENT</span><span class="p">)</span>
+</span><span id="Parser-3651"><a href="#Parser-3651"><span class="linenos">3651</span></a>
+</span><span id="Parser-3652"><a href="#Parser-3652"><span class="linenos">3652</span></a> <span class="k">def</span> <span class="nf">_parse_unary</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3653"><a href="#Parser-3653"><span class="linenos">3653</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">):</span>
+</span><span id="Parser-3654"><a href="#Parser-3654"><span class="linenos">3654</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">UNARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Parser-3655"><a href="#Parser-3655"><span class="linenos">3655</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">())</span>
+</span><span id="Parser-3656"><a href="#Parser-3656"><span class="linenos">3656</span></a>
+</span><span id="Parser-3657"><a href="#Parser-3657"><span class="linenos">3657</span></a> <span class="k">def</span> <span class="nf">_parse_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_interval</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3658"><a href="#Parser-3658"><span class="linenos">3658</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="n">parse_interval</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">()</span>
+</span><span id="Parser-3659"><a href="#Parser-3659"><span class="linenos">3659</span></a> <span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
+</span><span id="Parser-3660"><a href="#Parser-3660"><span class="linenos">3660</span></a> <span class="c1"># Convert INTERVAL &#39;val_1&#39; unit_1 ... &#39;val_n&#39; unit_n into a sum of intervals</span>
+</span><span id="Parser-3661"><a href="#Parser-3661"><span class="linenos">3661</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">),</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-3662"><a href="#Parser-3662"><span class="linenos">3662</span></a> <span class="n">interval</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-3663"><a href="#Parser-3663"><span class="linenos">3663</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_interval</span><span class="p">(</span><span class="n">match_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3664"><a href="#Parser-3664"><span class="linenos">3664</span></a> <span class="p">)</span>
</span><span id="Parser-3665"><a href="#Parser-3665"><span class="linenos">3665</span></a>
-</span><span id="Parser-3666"><a href="#Parser-3666"><span class="linenos">3666</span></a> <span class="k">return</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3666"><a href="#Parser-3666"><span class="linenos">3666</span></a> <span class="k">return</span> <span class="n">interval</span>
</span><span id="Parser-3667"><a href="#Parser-3667"><span class="linenos">3667</span></a>
-</span><span id="Parser-3668"><a href="#Parser-3668"><span class="linenos">3668</span></a> <span class="k">def</span> <span class="nf">_parse_type_size</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">]:</span>
-</span><span id="Parser-3669"><a href="#Parser-3669"><span class="linenos">3669</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="Parser-3670"><a href="#Parser-3670"><span class="linenos">3670</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Parser-3671"><a href="#Parser-3671"><span class="linenos">3671</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3672"><a href="#Parser-3672"><span class="linenos">3672</span></a>
-</span><span id="Parser-3673"><a href="#Parser-3673"><span class="linenos">3673</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3674"><a href="#Parser-3674"><span class="linenos">3674</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-3675"><a href="#Parser-3675"><span class="linenos">3675</span></a> <span class="p">)</span>
-</span><span id="Parser-3676"><a href="#Parser-3676"><span class="linenos">3676</span></a>
-</span><span id="Parser-3677"><a href="#Parser-3677"><span class="linenos">3677</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
-</span><span id="Parser-3678"><a href="#Parser-3678"><span class="linenos">3678</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3679"><a href="#Parser-3679"><span class="linenos">3679</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3680"><a href="#Parser-3680"><span class="linenos">3680</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3681"><a href="#Parser-3681"><span class="linenos">3681</span></a>
-</span><span id="Parser-3682"><a href="#Parser-3682"><span class="linenos">3682</span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SYSUDTLIB&quot;</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">)</span>
-</span><span id="Parser-3683"><a href="#Parser-3683"><span class="linenos">3683</span></a>
-</span><span id="Parser-3684"><a href="#Parser-3684"><span class="linenos">3684</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">):</span>
-</span><span id="Parser-3685"><a href="#Parser-3685"><span class="linenos">3685</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">allow_identifiers</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
-</span><span id="Parser-3686"><a href="#Parser-3686"><span class="linenos">3686</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
-</span><span id="Parser-3687"><a href="#Parser-3687"><span class="linenos">3687</span></a> <span class="p">)</span>
-</span><span id="Parser-3688"><a href="#Parser-3688"><span class="linenos">3688</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
-</span><span id="Parser-3689"><a href="#Parser-3689"><span class="linenos">3689</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">identifier</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Parser-3690"><a href="#Parser-3690"><span class="linenos">3690</span></a>
-</span><span id="Parser-3691"><a href="#Parser-3691"><span class="linenos">3691</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Parser-3692"><a href="#Parser-3692"><span class="linenos">3692</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unexpected identifier&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-3668"><a href="#Parser-3668"><span class="linenos">3668</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-3669"><a href="#Parser-3669"><span class="linenos">3669</span></a> <span class="n">data_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3670"><a href="#Parser-3670"><span class="linenos">3670</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-3671"><a href="#Parser-3671"><span class="linenos">3671</span></a>
+</span><span id="Parser-3672"><a href="#Parser-3672"><span class="linenos">3672</span></a> <span class="k">if</span> <span class="n">data_type</span><span class="p">:</span>
+</span><span id="Parser-3673"><a href="#Parser-3673"><span class="linenos">3673</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="Parser-3674"><a href="#Parser-3674"><span class="linenos">3674</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_LITERAL_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">data_type</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3675"><a href="#Parser-3675"><span class="linenos">3675</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Parser-3676"><a href="#Parser-3676"><span class="linenos">3676</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">data_type</span><span class="p">)</span>
+</span><span id="Parser-3677"><a href="#Parser-3677"><span class="linenos">3677</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">data_type</span><span class="p">)</span>
+</span><span id="Parser-3678"><a href="#Parser-3678"><span class="linenos">3678</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">data_type</span><span class="o">.</span><span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-3679"><a href="#Parser-3679"><span class="linenos">3679</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3680"><a href="#Parser-3680"><span class="linenos">3680</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-3681"><a href="#Parser-3681"><span class="linenos">3681</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">data_type</span><span class="p">)</span>
+</span><span id="Parser-3682"><a href="#Parser-3682"><span class="linenos">3682</span></a>
+</span><span id="Parser-3683"><a href="#Parser-3683"><span class="linenos">3683</span></a> <span class="k">return</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3684"><a href="#Parser-3684"><span class="linenos">3684</span></a>
+</span><span id="Parser-3685"><a href="#Parser-3685"><span class="linenos">3685</span></a> <span class="k">def</span> <span class="nf">_parse_type_size</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">]:</span>
+</span><span id="Parser-3686"><a href="#Parser-3686"><span class="linenos">3686</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="Parser-3687"><a href="#Parser-3687"><span class="linenos">3687</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Parser-3688"><a href="#Parser-3688"><span class="linenos">3688</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3689"><a href="#Parser-3689"><span class="linenos">3689</span></a>
+</span><span id="Parser-3690"><a href="#Parser-3690"><span class="linenos">3690</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3691"><a href="#Parser-3691"><span class="linenos">3691</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataTypeParam</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3692"><a href="#Parser-3692"><span class="linenos">3692</span></a> <span class="p">)</span>
</span><span id="Parser-3693"><a href="#Parser-3693"><span class="linenos">3693</span></a>
-</span><span id="Parser-3694"><a href="#Parser-3694"><span class="linenos">3694</span></a> <span class="k">if</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">:</span>
-</span><span id="Parser-3695"><a href="#Parser-3695"><span class="linenos">3695</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="Parser-3696"><a href="#Parser-3696"><span class="linenos">3696</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span><span class="p">:</span>
-</span><span id="Parser-3697"><a href="#Parser-3697"><span class="linenos">3697</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Parser-3694"><a href="#Parser-3694"><span class="linenos">3694</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
+</span><span id="Parser-3695"><a href="#Parser-3695"><span class="linenos">3695</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3696"><a href="#Parser-3696"><span class="linenos">3696</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3697"><a href="#Parser-3697"><span class="linenos">3697</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-3698"><a href="#Parser-3698"><span class="linenos">3698</span></a>
-</span><span id="Parser-3699"><a href="#Parser-3699"><span class="linenos">3699</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
-</span><span id="Parser-3700"><a href="#Parser-3700"><span class="linenos">3700</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Parser-3701"><a href="#Parser-3701"><span class="linenos">3701</span></a>
-</span><span id="Parser-3702"><a href="#Parser-3702"><span class="linenos">3702</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-3703"><a href="#Parser-3703"><span class="linenos">3703</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3704"><a href="#Parser-3704"><span class="linenos">3704</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-3705"><a href="#Parser-3705"><span class="linenos">3705</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3706"><a href="#Parser-3706"><span class="linenos">3706</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3707"><a href="#Parser-3707"><span class="linenos">3707</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3708"><a href="#Parser-3708"><span class="linenos">3708</span></a>
-</span><span id="Parser-3709"><a href="#Parser-3709"><span class="linenos">3709</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="Parser-3699"><a href="#Parser-3699"><span class="linenos">3699</span></a> <span class="n">prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SYSUDTLIB&quot;</span><span class="p">,</span> <span class="s2">&quot;.&quot;</span><span class="p">)</span>
+</span><span id="Parser-3700"><a href="#Parser-3700"><span class="linenos">3700</span></a>
+</span><span id="Parser-3701"><a href="#Parser-3701"><span class="linenos">3701</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">):</span>
+</span><span id="Parser-3702"><a href="#Parser-3702"><span class="linenos">3702</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="n">allow_identifiers</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
+</span><span id="Parser-3703"><a href="#Parser-3703"><span class="linenos">3703</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
+</span><span id="Parser-3704"><a href="#Parser-3704"><span class="linenos">3704</span></a> <span class="p">)</span>
+</span><span id="Parser-3705"><a href="#Parser-3705"><span class="linenos">3705</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
+</span><span id="Parser-3706"><a href="#Parser-3706"><span class="linenos">3706</span></a> <span class="n">tokens</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">tokenize</span><span class="p">(</span><span class="n">identifier</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="Parser-3707"><a href="#Parser-3707"><span class="linenos">3707</span></a>
+</span><span id="Parser-3708"><a href="#Parser-3708"><span class="linenos">3708</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Parser-3709"><a href="#Parser-3709"><span class="linenos">3709</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Unexpected identifier&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-3710"><a href="#Parser-3710"><span class="linenos">3710</span></a>
-</span><span id="Parser-3711"><a href="#Parser-3711"><span class="linenos">3711</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">:</span>
-</span><span id="Parser-3712"><a href="#Parser-3712"><span class="linenos">3712</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PseudoType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Parser-3713"><a href="#Parser-3713"><span class="linenos">3713</span></a>
-</span><span id="Parser-3714"><a href="#Parser-3714"><span class="linenos">3714</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">:</span>
-</span><span id="Parser-3715"><a href="#Parser-3715"><span class="linenos">3715</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ObjectIdentifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Parser-3716"><a href="#Parser-3716"><span class="linenos">3716</span></a>
-</span><span id="Parser-3717"><a href="#Parser-3717"><span class="linenos">3717</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPE_TOKENS</span>
-</span><span id="Parser-3718"><a href="#Parser-3718"><span class="linenos">3718</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_TYPE_TOKENS</span>
-</span><span id="Parser-3719"><a href="#Parser-3719"><span class="linenos">3719</span></a> <span class="n">is_aggregate</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_TYPE_TOKENS</span>
-</span><span id="Parser-3720"><a href="#Parser-3720"><span class="linenos">3720</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3721"><a href="#Parser-3721"><span class="linenos">3721</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3722"><a href="#Parser-3722"><span class="linenos">3722</span></a>
-</span><span id="Parser-3723"><a href="#Parser-3723"><span class="linenos">3723</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-3724"><a href="#Parser-3724"><span class="linenos">3724</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="Parser-3725"><a href="#Parser-3725"><span class="linenos">3725</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">)</span>
-</span><span id="Parser-3726"><a href="#Parser-3726"><span class="linenos">3726</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
-</span><span id="Parser-3727"><a href="#Parser-3727"><span class="linenos">3727</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="Parser-3728"><a href="#Parser-3728"><span class="linenos">3728</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
-</span><span id="Parser-3729"><a href="#Parser-3729"><span class="linenos">3729</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
-</span><span id="Parser-3730"><a href="#Parser-3730"><span class="linenos">3730</span></a> <span class="p">)</span>
-</span><span id="Parser-3731"><a href="#Parser-3731"><span class="linenos">3731</span></a> <span class="p">)</span>
-</span><span id="Parser-3732"><a href="#Parser-3732"><span class="linenos">3732</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">:</span>
-</span><span id="Parser-3733"><a href="#Parser-3733"><span class="linenos">3733</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
-</span><span id="Parser-3734"><a href="#Parser-3734"><span class="linenos">3734</span></a> <span class="k">elif</span> <span class="n">is_aggregate</span><span class="p">:</span>
-</span><span id="Parser-3735"><a href="#Parser-3735"><span class="linenos">3735</span></a> <span class="n">func_or_ident</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
-</span><span id="Parser-3736"><a href="#Parser-3736"><span class="linenos">3736</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
-</span><span id="Parser-3737"><a href="#Parser-3737"><span class="linenos">3737</span></a> <span class="p">)</span>
-</span><span id="Parser-3738"><a href="#Parser-3738"><span class="linenos">3738</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">func_or_ident</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="Parser-3739"><a href="#Parser-3739"><span class="linenos">3739</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3740"><a href="#Parser-3740"><span class="linenos">3740</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="Parser-3741"><a href="#Parser-3741"><span class="linenos">3741</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
-</span><span id="Parser-3742"><a href="#Parser-3742"><span class="linenos">3742</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
-</span><span id="Parser-3743"><a href="#Parser-3743"><span class="linenos">3743</span></a> <span class="p">)</span>
-</span><span id="Parser-3744"><a href="#Parser-3744"><span class="linenos">3744</span></a> <span class="p">)</span>
-</span><span id="Parser-3745"><a href="#Parser-3745"><span class="linenos">3745</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">func_or_ident</span><span class="p">)</span>
-</span><span id="Parser-3746"><a href="#Parser-3746"><span class="linenos">3746</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3747"><a href="#Parser-3747"><span class="linenos">3747</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type_size</span><span class="p">)</span>
-</span><span id="Parser-3748"><a href="#Parser-3748"><span class="linenos">3748</span></a>
-</span><span id="Parser-3749"><a href="#Parser-3749"><span class="linenos">3749</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
-</span><span id="Parser-3750"><a href="#Parser-3750"><span class="linenos">3750</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-3751"><a href="#Parser-3751"><span class="linenos">3751</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3752"><a href="#Parser-3752"><span class="linenos">3752</span></a>
-</span><span id="Parser-3753"><a href="#Parser-3753"><span class="linenos">3753</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3754"><a href="#Parser-3754"><span class="linenos">3754</span></a>
-</span><span id="Parser-3755"><a href="#Parser-3755"><span class="linenos">3755</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3756"><a href="#Parser-3756"><span class="linenos">3756</span></a> <span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3757"><a href="#Parser-3757"><span class="linenos">3757</span></a>
-</span><span id="Parser-3758"><a href="#Parser-3758"><span class="linenos">3758</span></a> <span class="k">if</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
-</span><span id="Parser-3759"><a href="#Parser-3759"><span class="linenos">3759</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
-</span><span id="Parser-3760"><a href="#Parser-3760"><span class="linenos">3760</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">(</span><span class="n">type_required</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Parser-3761"><a href="#Parser-3761"><span class="linenos">3761</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3762"><a href="#Parser-3762"><span class="linenos">3762</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="Parser-3763"><a href="#Parser-3763"><span class="linenos">3763</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
-</span><span id="Parser-3764"><a href="#Parser-3764"><span class="linenos">3764</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
-</span><span id="Parser-3765"><a href="#Parser-3765"><span class="linenos">3765</span></a> <span class="p">)</span>
-</span><span id="Parser-3766"><a href="#Parser-3766"><span class="linenos">3766</span></a> <span class="p">)</span>
-</span><span id="Parser-3767"><a href="#Parser-3767"><span class="linenos">3767</span></a>
-</span><span id="Parser-3768"><a href="#Parser-3768"><span class="linenos">3768</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
-</span><span id="Parser-3769"><a href="#Parser-3769"><span class="linenos">3769</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting &gt;&quot;</span><span class="p">)</span>
-</span><span id="Parser-3770"><a href="#Parser-3770"><span class="linenos">3770</span></a>
-</span><span id="Parser-3771"><a href="#Parser-3771"><span class="linenos">3771</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)):</span>
-</span><span id="Parser-3772"><a href="#Parser-3772"><span class="linenos">3772</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
-</span><span id="Parser-3773"><a href="#Parser-3773"><span class="linenos">3773</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">))</span>
+</span><span id="Parser-3711"><a href="#Parser-3711"><span class="linenos">3711</span></a> <span class="k">if</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TYPE_TOKENS</span><span class="p">:</span>
+</span><span id="Parser-3712"><a href="#Parser-3712"><span class="linenos">3712</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="o">=</span> <span class="n">tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="Parser-3713"><a href="#Parser-3713"><span class="linenos">3713</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">SUPPORTS_USER_DEFINED_TYPES</span><span class="p">:</span>
+</span><span id="Parser-3714"><a href="#Parser-3714"><span class="linenos">3714</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="n">identifier</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Parser-3715"><a href="#Parser-3715"><span class="linenos">3715</span></a>
+</span><span id="Parser-3716"><a href="#Parser-3716"><span class="linenos">3716</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
+</span><span id="Parser-3717"><a href="#Parser-3717"><span class="linenos">3717</span></a> <span class="n">type_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">type_name</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Parser-3718"><a href="#Parser-3718"><span class="linenos">3718</span></a>
+</span><span id="Parser-3719"><a href="#Parser-3719"><span class="linenos">3719</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3720"><a href="#Parser-3720"><span class="linenos">3720</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3721"><a href="#Parser-3721"><span class="linenos">3721</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-3722"><a href="#Parser-3722"><span class="linenos">3722</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3723"><a href="#Parser-3723"><span class="linenos">3723</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3724"><a href="#Parser-3724"><span class="linenos">3724</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3725"><a href="#Parser-3725"><span class="linenos">3725</span></a>
+</span><span id="Parser-3726"><a href="#Parser-3726"><span class="linenos">3726</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="Parser-3727"><a href="#Parser-3727"><span class="linenos">3727</span></a>
+</span><span id="Parser-3728"><a href="#Parser-3728"><span class="linenos">3728</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PSEUDO_TYPE</span><span class="p">:</span>
+</span><span id="Parser-3729"><a href="#Parser-3729"><span class="linenos">3729</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PseudoType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="Parser-3730"><a href="#Parser-3730"><span class="linenos">3730</span></a>
+</span><span id="Parser-3731"><a href="#Parser-3731"><span class="linenos">3731</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">OBJECT_IDENTIFIER</span><span class="p">:</span>
+</span><span id="Parser-3732"><a href="#Parser-3732"><span class="linenos">3732</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ObjectIdentifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="Parser-3733"><a href="#Parser-3733"><span class="linenos">3733</span></a>
+</span><span id="Parser-3734"><a href="#Parser-3734"><span class="linenos">3734</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NESTED_TYPE_TOKENS</span>
+</span><span id="Parser-3735"><a href="#Parser-3735"><span class="linenos">3735</span></a> <span class="n">is_struct</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">STRUCT_TYPE_TOKENS</span>
+</span><span id="Parser-3736"><a href="#Parser-3736"><span class="linenos">3736</span></a> <span class="n">is_aggregate</span> <span class="o">=</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">AGGREGATE_TYPE_TOKENS</span>
+</span><span id="Parser-3737"><a href="#Parser-3737"><span class="linenos">3737</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3738"><a href="#Parser-3738"><span class="linenos">3738</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3739"><a href="#Parser-3739"><span class="linenos">3739</span></a>
+</span><span id="Parser-3740"><a href="#Parser-3740"><span class="linenos">3740</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-3741"><a href="#Parser-3741"><span class="linenos">3741</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="Parser-3742"><a href="#Parser-3742"><span class="linenos">3742</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">)</span>
+</span><span id="Parser-3743"><a href="#Parser-3743"><span class="linenos">3743</span></a> <span class="k">elif</span> <span class="n">nested</span><span class="p">:</span>
+</span><span id="Parser-3744"><a href="#Parser-3744"><span class="linenos">3744</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="Parser-3745"><a href="#Parser-3745"><span class="linenos">3745</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="Parser-3746"><a href="#Parser-3746"><span class="linenos">3746</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="Parser-3747"><a href="#Parser-3747"><span class="linenos">3747</span></a> <span class="p">)</span>
+</span><span id="Parser-3748"><a href="#Parser-3748"><span class="linenos">3748</span></a> <span class="p">)</span>
+</span><span id="Parser-3749"><a href="#Parser-3749"><span class="linenos">3749</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ENUM_TYPE_TOKENS</span><span class="p">:</span>
+</span><span id="Parser-3750"><a href="#Parser-3750"><span class="linenos">3750</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">)</span>
+</span><span id="Parser-3751"><a href="#Parser-3751"><span class="linenos">3751</span></a> <span class="k">elif</span> <span class="n">is_aggregate</span><span class="p">:</span>
+</span><span id="Parser-3752"><a href="#Parser-3752"><span class="linenos">3752</span></a> <span class="n">func_or_ident</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span>
+</span><span id="Parser-3753"><a href="#Parser-3753"><span class="linenos">3753</span></a> <span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">,)</span>
+</span><span id="Parser-3754"><a href="#Parser-3754"><span class="linenos">3754</span></a> <span class="p">)</span>
+</span><span id="Parser-3755"><a href="#Parser-3755"><span class="linenos">3755</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">func_or_ident</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="Parser-3756"><a href="#Parser-3756"><span class="linenos">3756</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3757"><a href="#Parser-3757"><span class="linenos">3757</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="Parser-3758"><a href="#Parser-3758"><span class="linenos">3758</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="Parser-3759"><a href="#Parser-3759"><span class="linenos">3759</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="Parser-3760"><a href="#Parser-3760"><span class="linenos">3760</span></a> <span class="p">)</span>
+</span><span id="Parser-3761"><a href="#Parser-3761"><span class="linenos">3761</span></a> <span class="p">)</span>
+</span><span id="Parser-3762"><a href="#Parser-3762"><span class="linenos">3762</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">func_or_ident</span><span class="p">)</span>
+</span><span id="Parser-3763"><a href="#Parser-3763"><span class="linenos">3763</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3764"><a href="#Parser-3764"><span class="linenos">3764</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_type_size</span><span class="p">)</span>
+</span><span id="Parser-3765"><a href="#Parser-3765"><span class="linenos">3765</span></a>
+</span><span id="Parser-3766"><a href="#Parser-3766"><span class="linenos">3766</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expressions</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
+</span><span id="Parser-3767"><a href="#Parser-3767"><span class="linenos">3767</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3768"><a href="#Parser-3768"><span class="linenos">3768</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3769"><a href="#Parser-3769"><span class="linenos">3769</span></a>
+</span><span id="Parser-3770"><a href="#Parser-3770"><span class="linenos">3770</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3771"><a href="#Parser-3771"><span class="linenos">3771</span></a>
+</span><span id="Parser-3772"><a href="#Parser-3772"><span class="linenos">3772</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-3773"><a href="#Parser-3773"><span class="linenos">3773</span></a> <span class="n">values</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3774"><a href="#Parser-3774"><span class="linenos">3774</span></a>
-</span><span id="Parser-3775"><a href="#Parser-3775"><span class="linenos">3775</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMESTAMPS</span><span class="p">:</span>
-</span><span id="Parser-3776"><a href="#Parser-3776"><span class="linenos">3776</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3777"><a href="#Parser-3777"><span class="linenos">3777</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3778"><a href="#Parser-3778"><span class="linenos">3778</span></a> <span class="n">tz_type</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-3779"><a href="#Parser-3779"><span class="linenos">3779</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span>
-</span><span id="Parser-3780"><a href="#Parser-3780"><span class="linenos">3780</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMES</span>
-</span><span id="Parser-3781"><a href="#Parser-3781"><span class="linenos">3781</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span>
-</span><span id="Parser-3782"><a href="#Parser-3782"><span class="linenos">3782</span></a> <span class="p">)</span>
-</span><span id="Parser-3783"><a href="#Parser-3783"><span class="linenos">3783</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">tz_type</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-3784"><a href="#Parser-3784"><span class="linenos">3784</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3785"><a href="#Parser-3785"><span class="linenos">3785</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3786"><a href="#Parser-3786"><span class="linenos">3786</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-3787"><a href="#Parser-3787"><span class="linenos">3787</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3788"><a href="#Parser-3788"><span class="linenos">3788</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3789"><a href="#Parser-3789"><span class="linenos">3789</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
-</span><span id="Parser-3790"><a href="#Parser-3790"><span class="linenos">3790</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="Parser-3775"><a href="#Parser-3775"><span class="linenos">3775</span></a> <span class="k">if</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">LT</span><span class="p">):</span>
+</span><span id="Parser-3776"><a href="#Parser-3776"><span class="linenos">3776</span></a> <span class="k">if</span> <span class="n">is_struct</span><span class="p">:</span>
+</span><span id="Parser-3777"><a href="#Parser-3777"><span class="linenos">3777</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_struct_types</span><span class="p">(</span><span class="n">type_required</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Parser-3778"><a href="#Parser-3778"><span class="linenos">3778</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3779"><a href="#Parser-3779"><span class="linenos">3779</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="Parser-3780"><a href="#Parser-3780"><span class="linenos">3780</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span>
+</span><span id="Parser-3781"><a href="#Parser-3781"><span class="linenos">3781</span></a> <span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span> <span class="n">allow_identifiers</span><span class="o">=</span><span class="n">allow_identifiers</span>
+</span><span id="Parser-3782"><a href="#Parser-3782"><span class="linenos">3782</span></a> <span class="p">)</span>
+</span><span id="Parser-3783"><a href="#Parser-3783"><span class="linenos">3783</span></a> <span class="p">)</span>
+</span><span id="Parser-3784"><a href="#Parser-3784"><span class="linenos">3784</span></a>
+</span><span id="Parser-3785"><a href="#Parser-3785"><span class="linenos">3785</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">GT</span><span class="p">):</span>
+</span><span id="Parser-3786"><a href="#Parser-3786"><span class="linenos">3786</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting &gt;&quot;</span><span class="p">)</span>
+</span><span id="Parser-3787"><a href="#Parser-3787"><span class="linenos">3787</span></a>
+</span><span id="Parser-3788"><a href="#Parser-3788"><span class="linenos">3788</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)):</span>
+</span><span id="Parser-3789"><a href="#Parser-3789"><span class="linenos">3789</span></a> <span class="n">values</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="Parser-3790"><a href="#Parser-3790"><span class="linenos">3790</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">))</span>
</span><span id="Parser-3791"><a href="#Parser-3791"><span class="linenos">3791</span></a>
-</span><span id="Parser-3792"><a href="#Parser-3792"><span class="linenos">3792</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
-</span><span id="Parser-3793"><a href="#Parser-3793"><span class="linenos">3793</span></a> <span class="n">span</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntervalSpan</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">())]</span>
-</span><span id="Parser-3794"><a href="#Parser-3794"><span class="linenos">3794</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3795"><a href="#Parser-3795"><span class="linenos">3795</span></a> <span class="n">span</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-3796"><a href="#Parser-3796"><span class="linenos">3796</span></a>
-</span><span id="Parser-3797"><a href="#Parser-3797"><span class="linenos">3797</span></a> <span class="k">if</span> <span class="n">span</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">unit</span><span class="p">:</span>
-</span><span id="Parser-3798"><a href="#Parser-3798"><span class="linenos">3798</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3799"><a href="#Parser-3799"><span class="linenos">3799</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">span</span>
-</span><span id="Parser-3800"><a href="#Parser-3800"><span class="linenos">3800</span></a> <span class="p">)</span>
-</span><span id="Parser-3801"><a href="#Parser-3801"><span class="linenos">3801</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3802"><a href="#Parser-3802"><span class="linenos">3802</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">))</span>
-</span><span id="Parser-3803"><a href="#Parser-3803"><span class="linenos">3803</span></a>
-</span><span id="Parser-3804"><a href="#Parser-3804"><span class="linenos">3804</span></a> <span class="k">if</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">check_func</span><span class="p">:</span>
-</span><span id="Parser-3805"><a href="#Parser-3805"><span class="linenos">3805</span></a> <span class="n">index2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3806"><a href="#Parser-3806"><span class="linenos">3806</span></a> <span class="n">peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-3807"><a href="#Parser-3807"><span class="linenos">3807</span></a>
-</span><span id="Parser-3808"><a href="#Parser-3808"><span class="linenos">3808</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">peek</span><span class="p">:</span>
-</span><span id="Parser-3809"><a href="#Parser-3809"><span class="linenos">3809</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-3810"><a href="#Parser-3810"><span class="linenos">3810</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3811"><a href="#Parser-3811"><span class="linenos">3811</span></a>
-</span><span id="Parser-3812"><a href="#Parser-3812"><span class="linenos">3812</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index2</span><span class="p">)</span>
+</span><span id="Parser-3792"><a href="#Parser-3792"><span class="linenos">3792</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMESTAMPS</span><span class="p">:</span>
+</span><span id="Parser-3793"><a href="#Parser-3793"><span class="linenos">3793</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3794"><a href="#Parser-3794"><span class="linenos">3794</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3795"><a href="#Parser-3795"><span class="linenos">3795</span></a> <span class="n">tz_type</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-3796"><a href="#Parser-3796"><span class="linenos">3796</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMETZ</span>
+</span><span id="Parser-3797"><a href="#Parser-3797"><span class="linenos">3797</span></a> <span class="k">if</span> <span class="n">type_token</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">TIMES</span>
+</span><span id="Parser-3798"><a href="#Parser-3798"><span class="linenos">3798</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span>
+</span><span id="Parser-3799"><a href="#Parser-3799"><span class="linenos">3799</span></a> <span class="p">)</span>
+</span><span id="Parser-3800"><a href="#Parser-3800"><span class="linenos">3800</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">tz_type</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-3801"><a href="#Parser-3801"><span class="linenos">3801</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;LOCAL&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3802"><a href="#Parser-3802"><span class="linenos">3802</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3803"><a href="#Parser-3803"><span class="linenos">3803</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TIMESTAMPLTZ</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-3804"><a href="#Parser-3804"><span class="linenos">3804</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3805"><a href="#Parser-3805"><span class="linenos">3805</span></a> <span class="n">maybe_func</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3806"><a href="#Parser-3806"><span class="linenos">3806</span></a> <span class="k">elif</span> <span class="n">type_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">:</span>
+</span><span id="Parser-3807"><a href="#Parser-3807"><span class="linenos">3807</span></a> <span class="n">unit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="Parser-3808"><a href="#Parser-3808"><span class="linenos">3808</span></a>
+</span><span id="Parser-3809"><a href="#Parser-3809"><span class="linenos">3809</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
+</span><span id="Parser-3810"><a href="#Parser-3810"><span class="linenos">3810</span></a> <span class="n">span</span> <span class="o">=</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">IntervalSpan</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">unit</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">())]</span>
+</span><span id="Parser-3811"><a href="#Parser-3811"><span class="linenos">3811</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3812"><a href="#Parser-3812"><span class="linenos">3812</span></a> <span class="n">span</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-3813"><a href="#Parser-3813"><span class="linenos">3813</span></a>
-</span><span id="Parser-3814"><a href="#Parser-3814"><span class="linenos">3814</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Parser-3815"><a href="#Parser-3815"><span class="linenos">3815</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNSIGNED&quot;</span><span class="p">):</span>
-</span><span id="Parser-3816"><a href="#Parser-3816"><span class="linenos">3816</span></a> <span class="n">unsigned_type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SIGNED_TO_UNSIGNED_TYPE_TOKEN</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_token</span><span class="p">)</span>
-</span><span id="Parser-3817"><a href="#Parser-3817"><span class="linenos">3817</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unsigned_type_token</span><span class="p">:</span>
-</span><span id="Parser-3818"><a href="#Parser-3818"><span class="linenos">3818</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot convert </span><span class="si">{</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2"> to unsigned.&quot;</span><span class="p">)</span>
-</span><span id="Parser-3819"><a href="#Parser-3819"><span class="linenos">3819</span></a>
-</span><span id="Parser-3820"><a href="#Parser-3820"><span class="linenos">3820</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="n">unsigned_type_token</span> <span class="ow">or</span> <span class="n">type_token</span>
-</span><span id="Parser-3821"><a href="#Parser-3821"><span class="linenos">3821</span></a>
-</span><span id="Parser-3822"><a href="#Parser-3822"><span class="linenos">3822</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
-</span><span id="Parser-3823"><a href="#Parser-3823"><span class="linenos">3823</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
-</span><span id="Parser-3824"><a href="#Parser-3824"><span class="linenos">3824</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-3825"><a href="#Parser-3825"><span class="linenos">3825</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
-</span><span id="Parser-3826"><a href="#Parser-3826"><span class="linenos">3826</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
-</span><span id="Parser-3827"><a href="#Parser-3827"><span class="linenos">3827</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
-</span><span id="Parser-3828"><a href="#Parser-3828"><span class="linenos">3828</span></a> <span class="p">)</span>
-</span><span id="Parser-3829"><a href="#Parser-3829"><span class="linenos">3829</span></a>
-</span><span id="Parser-3830"><a href="#Parser-3830"><span class="linenos">3830</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">):</span>
-</span><span id="Parser-3831"><a href="#Parser-3831"><span class="linenos">3831</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-3832"><a href="#Parser-3832"><span class="linenos">3832</span></a>
-</span><span id="Parser-3833"><a href="#Parser-3833"><span class="linenos">3833</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3834"><a href="#Parser-3834"><span class="linenos">3834</span></a>
-</span><span id="Parser-3835"><a href="#Parser-3835"><span class="linenos">3835</span></a> <span class="k">def</span> <span class="nf">_parse_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_required</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3836"><a href="#Parser-3836"><span class="linenos">3836</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-3837"><a href="#Parser-3837"><span class="linenos">3837</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">(</span><span class="n">parse_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-3838"><a href="#Parser-3838"><span class="linenos">3838</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span>
-</span><span id="Parser-3839"><a href="#Parser-3839"><span class="linenos">3839</span></a> <span class="n">column_def</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3840"><a href="#Parser-3840"><span class="linenos">3840</span></a>
-</span><span id="Parser-3841"><a href="#Parser-3841"><span class="linenos">3841</span></a> <span class="k">if</span> <span class="n">type_required</span> <span class="ow">and</span> <span class="p">(</span>
-</span><span id="Parser-3842"><a href="#Parser-3842"><span class="linenos">3842</span></a> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span>
-</span><span id="Parser-3843"><a href="#Parser-3843"><span class="linenos">3843</span></a> <span class="p">):</span>
-</span><span id="Parser-3844"><a href="#Parser-3844"><span class="linenos">3844</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-3845"><a href="#Parser-3845"><span class="linenos">3845</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="Parser-3814"><a href="#Parser-3814"><span class="linenos">3814</span></a> <span class="k">if</span> <span class="n">span</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">unit</span><span class="p">:</span>
+</span><span id="Parser-3815"><a href="#Parser-3815"><span class="linenos">3815</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3816"><a href="#Parser-3816"><span class="linenos">3816</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INTERVAL</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">span</span>
+</span><span id="Parser-3817"><a href="#Parser-3817"><span class="linenos">3817</span></a> <span class="p">)</span>
+</span><span id="Parser-3818"><a href="#Parser-3818"><span class="linenos">3818</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3819"><a href="#Parser-3819"><span class="linenos">3819</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">,</span> <span class="n">unit</span><span class="o">=</span><span class="n">unit</span><span class="p">))</span>
+</span><span id="Parser-3820"><a href="#Parser-3820"><span class="linenos">3820</span></a>
+</span><span id="Parser-3821"><a href="#Parser-3821"><span class="linenos">3821</span></a> <span class="k">if</span> <span class="n">maybe_func</span> <span class="ow">and</span> <span class="n">check_func</span><span class="p">:</span>
+</span><span id="Parser-3822"><a href="#Parser-3822"><span class="linenos">3822</span></a> <span class="n">index2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-3823"><a href="#Parser-3823"><span class="linenos">3823</span></a> <span class="n">peek</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-3824"><a href="#Parser-3824"><span class="linenos">3824</span></a>
+</span><span id="Parser-3825"><a href="#Parser-3825"><span class="linenos">3825</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">peek</span><span class="p">:</span>
+</span><span id="Parser-3826"><a href="#Parser-3826"><span class="linenos">3826</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3827"><a href="#Parser-3827"><span class="linenos">3827</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3828"><a href="#Parser-3828"><span class="linenos">3828</span></a>
+</span><span id="Parser-3829"><a href="#Parser-3829"><span class="linenos">3829</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index2</span><span class="p">)</span>
+</span><span id="Parser-3830"><a href="#Parser-3830"><span class="linenos">3830</span></a>
+</span><span id="Parser-3831"><a href="#Parser-3831"><span class="linenos">3831</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Parser-3832"><a href="#Parser-3832"><span class="linenos">3832</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNSIGNED&quot;</span><span class="p">):</span>
+</span><span id="Parser-3833"><a href="#Parser-3833"><span class="linenos">3833</span></a> <span class="n">unsigned_type_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SIGNED_TO_UNSIGNED_TYPE_TOKEN</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">type_token</span><span class="p">)</span>
+</span><span id="Parser-3834"><a href="#Parser-3834"><span class="linenos">3834</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">unsigned_type_token</span><span class="p">:</span>
+</span><span id="Parser-3835"><a href="#Parser-3835"><span class="linenos">3835</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot convert </span><span class="si">{</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="si">}</span><span class="s2"> to unsigned.&quot;</span><span class="p">)</span>
+</span><span id="Parser-3836"><a href="#Parser-3836"><span class="linenos">3836</span></a>
+</span><span id="Parser-3837"><a href="#Parser-3837"><span class="linenos">3837</span></a> <span class="n">type_token</span> <span class="o">=</span> <span class="n">unsigned_type_token</span> <span class="ow">or</span> <span class="n">type_token</span>
+</span><span id="Parser-3838"><a href="#Parser-3838"><span class="linenos">3838</span></a>
+</span><span id="Parser-3839"><a href="#Parser-3839"><span class="linenos">3839</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span>
+</span><span id="Parser-3840"><a href="#Parser-3840"><span class="linenos">3840</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="p">[</span><span class="n">type_token</span><span class="o">.</span><span class="n">value</span><span class="p">],</span>
+</span><span id="Parser-3841"><a href="#Parser-3841"><span class="linenos">3841</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-3842"><a href="#Parser-3842"><span class="linenos">3842</span></a> <span class="n">nested</span><span class="o">=</span><span class="n">nested</span><span class="p">,</span>
+</span><span id="Parser-3843"><a href="#Parser-3843"><span class="linenos">3843</span></a> <span class="n">values</span><span class="o">=</span><span class="n">values</span><span class="p">,</span>
+</span><span id="Parser-3844"><a href="#Parser-3844"><span class="linenos">3844</span></a> <span class="n">prefix</span><span class="o">=</span><span class="n">prefix</span><span class="p">,</span>
+</span><span id="Parser-3845"><a href="#Parser-3845"><span class="linenos">3845</span></a> <span class="p">)</span>
</span><span id="Parser-3846"><a href="#Parser-3846"><span class="linenos">3846</span></a>
-</span><span id="Parser-3847"><a href="#Parser-3847"><span class="linenos">3847</span></a> <span class="k">return</span> <span class="n">column_def</span>
-</span><span id="Parser-3848"><a href="#Parser-3848"><span class="linenos">3848</span></a>
-</span><span id="Parser-3849"><a href="#Parser-3849"><span class="linenos">3849</span></a> <span class="k">def</span> <span class="nf">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3850"><a href="#Parser-3850"><span class="linenos">3850</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
-</span><span id="Parser-3851"><a href="#Parser-3851"><span class="linenos">3851</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3852"><a href="#Parser-3852"><span class="linenos">3852</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">zone</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">())</span>
-</span><span id="Parser-3853"><a href="#Parser-3853"><span class="linenos">3853</span></a>
-</span><span id="Parser-3854"><a href="#Parser-3854"><span class="linenos">3854</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3855"><a href="#Parser-3855"><span class="linenos">3855</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="Parser-3856"><a href="#Parser-3856"><span class="linenos">3856</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="Parser-3857"><a href="#Parser-3857"><span class="linenos">3857</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3858"><a href="#Parser-3858"><span class="linenos">3858</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Parser-3859"><a href="#Parser-3859"><span class="linenos">3859</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3860"><a href="#Parser-3860"><span class="linenos">3860</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3861"><a href="#Parser-3861"><span class="linenos">3861</span></a>
-</span><span id="Parser-3862"><a href="#Parser-3862"><span class="linenos">3862</span></a> <span class="k">def</span> <span class="nf">_parse_column_ops</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3863"><a href="#Parser-3863"><span class="linenos">3863</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3864"><a href="#Parser-3864"><span class="linenos">3864</span></a>
-</span><span id="Parser-3865"><a href="#Parser-3865"><span class="linenos">3865</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="p">):</span>
-</span><span id="Parser-3866"><a href="#Parser-3866"><span class="linenos">3866</span></a> <span class="n">op_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
-</span><span id="Parser-3867"><a href="#Parser-3867"><span class="linenos">3867</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">op_token</span><span class="p">)</span>
-</span><span id="Parser-3868"><a href="#Parser-3868"><span class="linenos">3868</span></a>
-</span><span id="Parser-3869"><a href="#Parser-3869"><span class="linenos">3869</span></a> <span class="k">if</span> <span class="n">op_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">:</span>
-</span><span id="Parser-3870"><a href="#Parser-3870"><span class="linenos">3870</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
-</span><span id="Parser-3871"><a href="#Parser-3871"><span class="linenos">3871</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">field</span><span class="p">:</span>
-</span><span id="Parser-3872"><a href="#Parser-3872"><span class="linenos">3872</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected type&quot;</span><span class="p">)</span>
-</span><span id="Parser-3873"><a href="#Parser-3873"><span class="linenos">3873</span></a> <span class="k">elif</span> <span class="n">op</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-3874"><a href="#Parser-3874"><span class="linenos">3874</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-3875"><a href="#Parser-3875"><span class="linenos">3875</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-3876"><a href="#Parser-3876"><span class="linenos">3876</span></a> <span class="n">field</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-3877"><a href="#Parser-3877"><span class="linenos">3877</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Parser-3878"><a href="#Parser-3878"><span class="linenos">3878</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span>
-</span><span id="Parser-3879"><a href="#Parser-3879"><span class="linenos">3879</span></a> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
-</span><span id="Parser-3880"><a href="#Parser-3880"><span class="linenos">3880</span></a> <span class="p">)</span>
-</span><span id="Parser-3881"><a href="#Parser-3881"><span class="linenos">3881</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3882"><a href="#Parser-3882"><span class="linenos">3882</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">anonymous_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3847"><a href="#Parser-3847"><span class="linenos">3847</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">):</span>
+</span><span id="Parser-3848"><a href="#Parser-3848"><span class="linenos">3848</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">this</span><span class="p">],</span> <span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3849"><a href="#Parser-3849"><span class="linenos">3849</span></a>
+</span><span id="Parser-3850"><a href="#Parser-3850"><span class="linenos">3850</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3851"><a href="#Parser-3851"><span class="linenos">3851</span></a>
+</span><span id="Parser-3852"><a href="#Parser-3852"><span class="linenos">3852</span></a> <span class="k">def</span> <span class="nf">_parse_struct_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">type_required</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3853"><a href="#Parser-3853"><span class="linenos">3853</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-3854"><a href="#Parser-3854"><span class="linenos">3854</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">(</span><span class="n">parse_interval</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-3855"><a href="#Parser-3855"><span class="linenos">3855</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span>
+</span><span id="Parser-3856"><a href="#Parser-3856"><span class="linenos">3856</span></a> <span class="n">column_def</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3857"><a href="#Parser-3857"><span class="linenos">3857</span></a>
+</span><span id="Parser-3858"><a href="#Parser-3858"><span class="linenos">3858</span></a> <span class="k">if</span> <span class="n">type_required</span> <span class="ow">and</span> <span class="p">(</span>
+</span><span id="Parser-3859"><a href="#Parser-3859"><span class="linenos">3859</span></a> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span><span class="p">)</span> <span class="ow">or</span> <span class="n">this</span> <span class="ow">is</span> <span class="n">column_def</span>
+</span><span id="Parser-3860"><a href="#Parser-3860"><span class="linenos">3860</span></a> <span class="p">):</span>
+</span><span id="Parser-3861"><a href="#Parser-3861"><span class="linenos">3861</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-3862"><a href="#Parser-3862"><span class="linenos">3862</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="Parser-3863"><a href="#Parser-3863"><span class="linenos">3863</span></a>
+</span><span id="Parser-3864"><a href="#Parser-3864"><span class="linenos">3864</span></a> <span class="k">return</span> <span class="n">column_def</span>
+</span><span id="Parser-3865"><a href="#Parser-3865"><span class="linenos">3865</span></a>
+</span><span id="Parser-3866"><a href="#Parser-3866"><span class="linenos">3866</span></a> <span class="k">def</span> <span class="nf">_parse_at_time_zone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3867"><a href="#Parser-3867"><span class="linenos">3867</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;AT&quot;</span><span class="p">,</span> <span class="s2">&quot;TIME&quot;</span><span class="p">,</span> <span class="s2">&quot;ZONE&quot;</span><span class="p">):</span>
+</span><span id="Parser-3868"><a href="#Parser-3868"><span class="linenos">3868</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3869"><a href="#Parser-3869"><span class="linenos">3869</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">zone</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_unary</span><span class="p">())</span>
+</span><span id="Parser-3870"><a href="#Parser-3870"><span class="linenos">3870</span></a>
+</span><span id="Parser-3871"><a href="#Parser-3871"><span class="linenos">3871</span></a> <span class="k">def</span> <span class="nf">_parse_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3872"><a href="#Parser-3872"><span class="linenos">3872</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">()</span>
+</span><span id="Parser-3873"><a href="#Parser-3873"><span class="linenos">3873</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_ops</span><span class="p">(</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">this</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3874"><a href="#Parser-3874"><span class="linenos">3874</span></a>
+</span><span id="Parser-3875"><a href="#Parser-3875"><span class="linenos">3875</span></a> <span class="k">def</span> <span class="nf">_parse_column_reference</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3876"><a href="#Parser-3876"><span class="linenos">3876</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="Parser-3877"><a href="#Parser-3877"><span class="linenos">3877</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="Parser-3878"><a href="#Parser-3878"><span class="linenos">3878</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3879"><a href="#Parser-3879"><span class="linenos">3879</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3880"><a href="#Parser-3880"><span class="linenos">3880</span></a>
+</span><span id="Parser-3881"><a href="#Parser-3881"><span class="linenos">3881</span></a> <span class="k">def</span> <span class="nf">_parse_column_ops</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3882"><a href="#Parser-3882"><span class="linenos">3882</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
</span><span id="Parser-3883"><a href="#Parser-3883"><span class="linenos">3883</span></a>
-</span><span id="Parser-3884"><a href="#Parser-3884"><span class="linenos">3884</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
-</span><span id="Parser-3885"><a href="#Parser-3885"><span class="linenos">3885</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
-</span><span id="Parser-3886"><a href="#Parser-3886"><span class="linenos">3886</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
-</span><span id="Parser-3887"><a href="#Parser-3887"><span class="linenos">3887</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
-</span><span id="Parser-3888"><a href="#Parser-3888"><span class="linenos">3888</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3889"><a href="#Parser-3889"><span class="linenos">3889</span></a>
-</span><span id="Parser-3890"><a href="#Parser-3890"><span class="linenos">3890</span></a> <span class="k">if</span> <span class="n">op</span><span class="p">:</span>
-</span><span id="Parser-3891"><a href="#Parser-3891"><span class="linenos">3891</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">field</span><span class="p">)</span>
-</span><span id="Parser-3892"><a href="#Parser-3892"><span class="linenos">3892</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">):</span>
-</span><span id="Parser-3893"><a href="#Parser-3893"><span class="linenos">3893</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-3894"><a href="#Parser-3894"><span class="linenos">3894</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
-</span><span id="Parser-3895"><a href="#Parser-3895"><span class="linenos">3895</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
-</span><span id="Parser-3896"><a href="#Parser-3896"><span class="linenos">3896</span></a> <span class="n">table</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-3897"><a href="#Parser-3897"><span class="linenos">3897</span></a> <span class="n">db</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">),</span>
-</span><span id="Parser-3898"><a href="#Parser-3898"><span class="linenos">3898</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">),</span>
-</span><span id="Parser-3899"><a href="#Parser-3899"><span class="linenos">3899</span></a> <span class="p">)</span>
-</span><span id="Parser-3900"><a href="#Parser-3900"><span class="linenos">3900</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3901"><a href="#Parser-3901"><span class="linenos">3901</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">field</span><span class="p">)</span>
-</span><span id="Parser-3902"><a href="#Parser-3902"><span class="linenos">3902</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3903"><a href="#Parser-3903"><span class="linenos">3903</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3904"><a href="#Parser-3904"><span class="linenos">3904</span></a>
-</span><span id="Parser-3905"><a href="#Parser-3905"><span class="linenos">3905</span></a> <span class="k">def</span> <span class="nf">_parse_primary</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3906"><a href="#Parser-3906"><span class="linenos">3906</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">):</span>
-</span><span id="Parser-3907"><a href="#Parser-3907"><span class="linenos">3907</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
-</span><span id="Parser-3908"><a href="#Parser-3908"><span class="linenos">3908</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-3909"><a href="#Parser-3909"><span class="linenos">3909</span></a>
-</span><span id="Parser-3910"><a href="#Parser-3910"><span class="linenos">3910</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span>
-</span><span id="Parser-3911"><a href="#Parser-3911"><span class="linenos">3911</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">primary</span><span class="p">]</span>
-</span><span id="Parser-3912"><a href="#Parser-3912"><span class="linenos">3912</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">):</span>
-</span><span id="Parser-3913"><a href="#Parser-3913"><span class="linenos">3913</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
-</span><span id="Parser-3914"><a href="#Parser-3914"><span class="linenos">3914</span></a>
-</span><span id="Parser-3915"><a href="#Parser-3915"><span class="linenos">3915</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Parser-3916"><a href="#Parser-3916"><span class="linenos">3916</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-3884"><a href="#Parser-3884"><span class="linenos">3884</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="p">):</span>
+</span><span id="Parser-3885"><a href="#Parser-3885"><span class="linenos">3885</span></a> <span class="n">op_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="Parser-3886"><a href="#Parser-3886"><span class="linenos">3886</span></a> <span class="n">op</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">COLUMN_OPERATORS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">op_token</span><span class="p">)</span>
+</span><span id="Parser-3887"><a href="#Parser-3887"><span class="linenos">3887</span></a>
+</span><span id="Parser-3888"><a href="#Parser-3888"><span class="linenos">3888</span></a> <span class="k">if</span> <span class="n">op_token</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DCOLON</span><span class="p">:</span>
+</span><span id="Parser-3889"><a href="#Parser-3889"><span class="linenos">3889</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="Parser-3890"><a href="#Parser-3890"><span class="linenos">3890</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">field</span><span class="p">:</span>
+</span><span id="Parser-3891"><a href="#Parser-3891"><span class="linenos">3891</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected type&quot;</span><span class="p">)</span>
+</span><span id="Parser-3892"><a href="#Parser-3892"><span class="linenos">3892</span></a> <span class="k">elif</span> <span class="n">op</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-3893"><a href="#Parser-3893"><span class="linenos">3893</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_reference</span><span class="p">()</span>
+</span><span id="Parser-3894"><a href="#Parser-3894"><span class="linenos">3894</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3895"><a href="#Parser-3895"><span class="linenos">3895</span></a> <span class="n">field</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">anonymous_func</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-3896"><a href="#Parser-3896"><span class="linenos">3896</span></a>
+</span><span id="Parser-3897"><a href="#Parser-3897"><span class="linenos">3897</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Func</span><span class="p">):</span>
+</span><span id="Parser-3898"><a href="#Parser-3898"><span class="linenos">3898</span></a> <span class="c1"># bigquery allows function calls like x.y.count(...)</span>
+</span><span id="Parser-3899"><a href="#Parser-3899"><span class="linenos">3899</span></a> <span class="c1"># SAFE.SUBSTR(...)</span>
+</span><span id="Parser-3900"><a href="#Parser-3900"><span class="linenos">3900</span></a> <span class="c1"># https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#function_call_rules</span>
+</span><span id="Parser-3901"><a href="#Parser-3901"><span class="linenos">3901</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3902"><a href="#Parser-3902"><span class="linenos">3902</span></a>
+</span><span id="Parser-3903"><a href="#Parser-3903"><span class="linenos">3903</span></a> <span class="k">if</span> <span class="n">op</span><span class="p">:</span>
+</span><span id="Parser-3904"><a href="#Parser-3904"><span class="linenos">3904</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">op</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">,</span> <span class="n">field</span><span class="p">)</span>
+</span><span id="Parser-3905"><a href="#Parser-3905"><span class="linenos">3905</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;catalog&quot;</span><span class="p">):</span>
+</span><span id="Parser-3906"><a href="#Parser-3906"><span class="linenos">3906</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-3907"><a href="#Parser-3907"><span class="linenos">3907</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">,</span>
+</span><span id="Parser-3908"><a href="#Parser-3908"><span class="linenos">3908</span></a> <span class="n">this</span><span class="o">=</span><span class="n">field</span><span class="p">,</span>
+</span><span id="Parser-3909"><a href="#Parser-3909"><span class="linenos">3909</span></a> <span class="n">table</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-3910"><a href="#Parser-3910"><span class="linenos">3910</span></a> <span class="n">db</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">),</span>
+</span><span id="Parser-3911"><a href="#Parser-3911"><span class="linenos">3911</span></a> <span class="n">catalog</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;db&quot;</span><span class="p">),</span>
+</span><span id="Parser-3912"><a href="#Parser-3912"><span class="linenos">3912</span></a> <span class="p">)</span>
+</span><span id="Parser-3913"><a href="#Parser-3913"><span class="linenos">3913</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3914"><a href="#Parser-3914"><span class="linenos">3914</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">field</span><span class="p">)</span>
+</span><span id="Parser-3915"><a href="#Parser-3915"><span class="linenos">3915</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3916"><a href="#Parser-3916"><span class="linenos">3916</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-3917"><a href="#Parser-3917"><span class="linenos">3917</span></a>
-</span><span id="Parser-3918"><a href="#Parser-3918"><span class="linenos">3918</span></a> <span class="k">return</span> <span class="n">primary</span>
-</span><span id="Parser-3919"><a href="#Parser-3919"><span class="linenos">3919</span></a>
-</span><span id="Parser-3920"><a href="#Parser-3920"><span class="linenos">3920</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">):</span>
-</span><span id="Parser-3921"><a href="#Parser-3921"><span class="linenos">3921</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;0.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Parser-3918"><a href="#Parser-3918"><span class="linenos">3918</span></a> <span class="k">def</span> <span class="nf">_parse_primary</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3919"><a href="#Parser-3919"><span class="linenos">3919</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">):</span>
+</span><span id="Parser-3920"><a href="#Parser-3920"><span class="linenos">3920</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="Parser-3921"><a href="#Parser-3921"><span class="linenos">3921</span></a> <span class="n">primary</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-3922"><a href="#Parser-3922"><span class="linenos">3922</span></a>
-</span><span id="Parser-3923"><a href="#Parser-3923"><span class="linenos">3923</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-3924"><a href="#Parser-3924"><span class="linenos">3924</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="Parser-3925"><a href="#Parser-3925"><span class="linenos">3925</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
-</span><span id="Parser-3926"><a href="#Parser-3926"><span class="linenos">3926</span></a>
-</span><span id="Parser-3927"><a href="#Parser-3927"><span class="linenos">3927</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
-</span><span id="Parser-3928"><a href="#Parser-3928"><span class="linenos">3928</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">query</span><span class="p">]</span>
-</span><span id="Parser-3929"><a href="#Parser-3929"><span class="linenos">3929</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3930"><a href="#Parser-3930"><span class="linenos">3930</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
-</span><span id="Parser-3931"><a href="#Parser-3931"><span class="linenos">3931</span></a>
-</span><span id="Parser-3932"><a href="#Parser-3932"><span class="linenos">3932</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="Parser-3933"><a href="#Parser-3933"><span class="linenos">3933</span></a>
-</span><span id="Parser-3934"><a href="#Parser-3934"><span class="linenos">3934</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
-</span><span id="Parser-3935"><a href="#Parser-3935"><span class="linenos">3935</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
-</span><span id="Parser-3936"><a href="#Parser-3936"><span class="linenos">3936</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_subquery</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">parse_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-3937"><a href="#Parser-3937"><span class="linenos">3937</span></a> <span class="p">)</span>
-</span><span id="Parser-3938"><a href="#Parser-3938"><span class="linenos">3938</span></a> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
-</span><span id="Parser-3939"><a href="#Parser-3939"><span class="linenos">3939</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-3940"><a href="#Parser-3940"><span class="linenos">3940</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-3941"><a href="#Parser-3941"><span class="linenos">3941</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
-</span><span id="Parser-3942"><a href="#Parser-3942"><span class="linenos">3942</span></a>
-</span><span id="Parser-3943"><a href="#Parser-3943"><span class="linenos">3943</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Parser-3944"><a href="#Parser-3944"><span class="linenos">3944</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
-</span><span id="Parser-3945"><a href="#Parser-3945"><span class="linenos">3945</span></a>
-</span><span id="Parser-3946"><a href="#Parser-3946"><span class="linenos">3946</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-3947"><a href="#Parser-3947"><span class="linenos">3947</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-3948"><a href="#Parser-3948"><span class="linenos">3948</span></a>
-</span><span id="Parser-3949"><a href="#Parser-3949"><span class="linenos">3949</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3950"><a href="#Parser-3950"><span class="linenos">3950</span></a>
-</span><span id="Parser-3951"><a href="#Parser-3951"><span class="linenos">3951</span></a> <span class="k">def</span> <span class="nf">_parse_field</span><span class="p">(</span>
-</span><span id="Parser-3952"><a href="#Parser-3952"><span class="linenos">3952</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-3953"><a href="#Parser-3953"><span class="linenos">3953</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-3954"><a href="#Parser-3954"><span class="linenos">3954</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-3955"><a href="#Parser-3955"><span class="linenos">3955</span></a> <span class="n">anonymous_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-3956"><a href="#Parser-3956"><span class="linenos">3956</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3957"><a href="#Parser-3957"><span class="linenos">3957</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Parser-3958"><a href="#Parser-3958"><span class="linenos">3958</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-3959"><a href="#Parser-3959"><span class="linenos">3959</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">)</span>
-</span><span id="Parser-3960"><a href="#Parser-3960"><span class="linenos">3960</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="n">any_token</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="n">tokens</span><span class="p">)</span>
-</span><span id="Parser-3961"><a href="#Parser-3961"><span class="linenos">3961</span></a> <span class="p">)</span>
-</span><span id="Parser-3962"><a href="#Parser-3962"><span class="linenos">3962</span></a>
-</span><span id="Parser-3963"><a href="#Parser-3963"><span class="linenos">3963</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
-</span><span id="Parser-3964"><a href="#Parser-3964"><span class="linenos">3964</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-3965"><a href="#Parser-3965"><span class="linenos">3965</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-3966"><a href="#Parser-3966"><span class="linenos">3966</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-3967"><a href="#Parser-3967"><span class="linenos">3967</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Parser-3968"><a href="#Parser-3968"><span class="linenos">3968</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3969"><a href="#Parser-3969"><span class="linenos">3969</span></a> <span class="c1"># This allows us to also parse {fn &lt;function&gt;} syntax (Snowflake, MySQL support this)</span>
-</span><span id="Parser-3970"><a href="#Parser-3970"><span class="linenos">3970</span></a> <span class="c1"># See: https://community.snowflake.com/s/article/SQL-Escape-Sequences</span>
-</span><span id="Parser-3971"><a href="#Parser-3971"><span class="linenos">3971</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-3972"><a href="#Parser-3972"><span class="linenos">3972</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Parser-3973"><a href="#Parser-3973"><span class="linenos">3973</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-3974"><a href="#Parser-3974"><span class="linenos">3974</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span>
-</span><span id="Parser-3975"><a href="#Parser-3975"><span class="linenos">3975</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;FN&quot;</span>
-</span><span id="Parser-3976"><a href="#Parser-3976"><span class="linenos">3976</span></a> <span class="p">):</span>
-</span><span id="Parser-3977"><a href="#Parser-3977"><span class="linenos">3977</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="Parser-3978"><a href="#Parser-3978"><span class="linenos">3978</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-3979"><a href="#Parser-3979"><span class="linenos">3979</span></a>
-</span><span id="Parser-3980"><a href="#Parser-3980"><span class="linenos">3980</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_call</span><span class="p">(</span>
-</span><span id="Parser-3981"><a href="#Parser-3981"><span class="linenos">3981</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
-</span><span id="Parser-3982"><a href="#Parser-3982"><span class="linenos">3982</span></a> <span class="p">)</span>
-</span><span id="Parser-3983"><a href="#Parser-3983"><span class="linenos">3983</span></a>
-</span><span id="Parser-3984"><a href="#Parser-3984"><span class="linenos">3984</span></a> <span class="k">if</span> <span class="n">fn_syntax</span><span class="p">:</span>
-</span><span id="Parser-3985"><a href="#Parser-3985"><span class="linenos">3985</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">)</span>
-</span><span id="Parser-3986"><a href="#Parser-3986"><span class="linenos">3986</span></a>
-</span><span id="Parser-3987"><a href="#Parser-3987"><span class="linenos">3987</span></a> <span class="k">return</span> <span class="n">func</span>
-</span><span id="Parser-3988"><a href="#Parser-3988"><span class="linenos">3988</span></a>
-</span><span id="Parser-3989"><a href="#Parser-3989"><span class="linenos">3989</span></a> <span class="k">def</span> <span class="nf">_parse_function_call</span><span class="p">(</span>
-</span><span id="Parser-3990"><a href="#Parser-3990"><span class="linenos">3990</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-3991"><a href="#Parser-3991"><span class="linenos">3991</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-3992"><a href="#Parser-3992"><span class="linenos">3992</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-3993"><a href="#Parser-3993"><span class="linenos">3993</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Parser-3994"><a href="#Parser-3994"><span class="linenos">3994</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-3995"><a href="#Parser-3995"><span class="linenos">3995</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-3996"><a href="#Parser-3996"><span class="linenos">3996</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-3997"><a href="#Parser-3997"><span class="linenos">3997</span></a>
-</span><span id="Parser-3998"><a href="#Parser-3998"><span class="linenos">3998</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="Parser-3999"><a href="#Parser-3999"><span class="linenos">3999</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span>
-</span><span id="Parser-4000"><a href="#Parser-4000"><span class="linenos">4000</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-4001"><a href="#Parser-4001"><span class="linenos">4001</span></a> <span class="n">upper</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-4002"><a href="#Parser-4002"><span class="linenos">4002</span></a>
-</span><span id="Parser-4003"><a href="#Parser-4003"><span class="linenos">4003</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
-</span><span id="Parser-4004"><a href="#Parser-4004"><span class="linenos">4004</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">parser</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVALID_FUNC_NAME_TOKENS</span><span class="p">:</span>
-</span><span id="Parser-4005"><a href="#Parser-4005"><span class="linenos">4005</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4006"><a href="#Parser-4006"><span class="linenos">4006</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Parser-4007"><a href="#Parser-4007"><span class="linenos">4007</span></a>
-</span><span id="Parser-4008"><a href="#Parser-4008"><span class="linenos">4008</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
-</span><span id="Parser-4009"><a href="#Parser-4009"><span class="linenos">4009</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">:</span>
-</span><span id="Parser-4010"><a href="#Parser-4010"><span class="linenos">4010</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4011"><a href="#Parser-4011"><span class="linenos">4011</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">[</span><span class="n">token_type</span><span class="p">])</span>
-</span><span id="Parser-4012"><a href="#Parser-4012"><span class="linenos">4012</span></a>
-</span><span id="Parser-4013"><a href="#Parser-4013"><span class="linenos">4013</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4014"><a href="#Parser-4014"><span class="linenos">4014</span></a>
-</span><span id="Parser-4015"><a href="#Parser-4015"><span class="linenos">4015</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNC_TOKENS</span><span class="p">:</span>
-</span><span id="Parser-4016"><a href="#Parser-4016"><span class="linenos">4016</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4017"><a href="#Parser-4017"><span class="linenos">4017</span></a>
-</span><span id="Parser-4018"><a href="#Parser-4018"><span class="linenos">4018</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="Parser-4019"><a href="#Parser-4019"><span class="linenos">4019</span></a>
-</span><span id="Parser-4020"><a href="#Parser-4020"><span class="linenos">4020</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
-</span><span id="Parser-4021"><a href="#Parser-4021"><span class="linenos">4021</span></a> <span class="k">if</span> <span class="n">parser</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
-</span><span id="Parser-4022"><a href="#Parser-4022"><span class="linenos">4022</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Parser-4023"><a href="#Parser-4023"><span class="linenos">4023</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4024"><a href="#Parser-4024"><span class="linenos">4024</span></a> <span class="n">subquery_predicate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUBQUERY_PREDICATES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">)</span>
+</span><span id="Parser-3923"><a href="#Parser-3923"><span class="linenos">3923</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">:</span>
+</span><span id="Parser-3924"><a href="#Parser-3924"><span class="linenos">3924</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">primary</span><span class="p">]</span>
+</span><span id="Parser-3925"><a href="#Parser-3925"><span class="linenos">3925</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">):</span>
+</span><span id="Parser-3926"><a href="#Parser-3926"><span class="linenos">3926</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+</span><span id="Parser-3927"><a href="#Parser-3927"><span class="linenos">3927</span></a>
+</span><span id="Parser-3928"><a href="#Parser-3928"><span class="linenos">3928</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Parser-3929"><a href="#Parser-3929"><span class="linenos">3929</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Concat</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-3930"><a href="#Parser-3930"><span class="linenos">3930</span></a>
+</span><span id="Parser-3931"><a href="#Parser-3931"><span class="linenos">3931</span></a> <span class="k">return</span> <span class="n">primary</span>
+</span><span id="Parser-3932"><a href="#Parser-3932"><span class="linenos">3932</span></a>
+</span><span id="Parser-3933"><a href="#Parser-3933"><span class="linenos">3933</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">):</span>
+</span><span id="Parser-3934"><a href="#Parser-3934"><span class="linenos">3934</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;0.</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Parser-3935"><a href="#Parser-3935"><span class="linenos">3935</span></a>
+</span><span id="Parser-3936"><a href="#Parser-3936"><span class="linenos">3936</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-3937"><a href="#Parser-3937"><span class="linenos">3937</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
+</span><span id="Parser-3938"><a href="#Parser-3938"><span class="linenos">3938</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span>
+</span><span id="Parser-3939"><a href="#Parser-3939"><span class="linenos">3939</span></a>
+</span><span id="Parser-3940"><a href="#Parser-3940"><span class="linenos">3940</span></a> <span class="k">if</span> <span class="n">query</span><span class="p">:</span>
+</span><span id="Parser-3941"><a href="#Parser-3941"><span class="linenos">3941</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="n">query</span><span class="p">]</span>
+</span><span id="Parser-3942"><a href="#Parser-3942"><span class="linenos">3942</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3943"><a href="#Parser-3943"><span class="linenos">3943</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expressions</span><span class="p">()</span>
+</span><span id="Parser-3944"><a href="#Parser-3944"><span class="linenos">3944</span></a>
+</span><span id="Parser-3945"><a href="#Parser-3945"><span class="linenos">3945</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">expressions</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="Parser-3946"><a href="#Parser-3946"><span class="linenos">3946</span></a>
+</span><span id="Parser-3947"><a href="#Parser-3947"><span class="linenos">3947</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Subqueryable</span><span class="p">):</span>
+</span><span id="Parser-3948"><a href="#Parser-3948"><span class="linenos">3948</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
+</span><span id="Parser-3949"><a href="#Parser-3949"><span class="linenos">3949</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_subquery</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">parse_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3950"><a href="#Parser-3950"><span class="linenos">3950</span></a> <span class="p">)</span>
+</span><span id="Parser-3951"><a href="#Parser-3951"><span class="linenos">3951</span></a> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+</span><span id="Parser-3952"><a href="#Parser-3952"><span class="linenos">3952</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Tuple</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-3953"><a href="#Parser-3953"><span class="linenos">3953</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-3954"><a href="#Parser-3954"><span class="linenos">3954</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Paren</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="n">this</span><span class="p">))</span>
+</span><span id="Parser-3955"><a href="#Parser-3955"><span class="linenos">3955</span></a>
+</span><span id="Parser-3956"><a href="#Parser-3956"><span class="linenos">3956</span></a> <span class="k">if</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Parser-3957"><a href="#Parser-3957"><span class="linenos">3957</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="Parser-3958"><a href="#Parser-3958"><span class="linenos">3958</span></a>
+</span><span id="Parser-3959"><a href="#Parser-3959"><span class="linenos">3959</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-3960"><a href="#Parser-3960"><span class="linenos">3960</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-3961"><a href="#Parser-3961"><span class="linenos">3961</span></a>
+</span><span id="Parser-3962"><a href="#Parser-3962"><span class="linenos">3962</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-3963"><a href="#Parser-3963"><span class="linenos">3963</span></a>
+</span><span id="Parser-3964"><a href="#Parser-3964"><span class="linenos">3964</span></a> <span class="k">def</span> <span class="nf">_parse_field</span><span class="p">(</span>
+</span><span id="Parser-3965"><a href="#Parser-3965"><span class="linenos">3965</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-3966"><a href="#Parser-3966"><span class="linenos">3966</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-3967"><a href="#Parser-3967"><span class="linenos">3967</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-3968"><a href="#Parser-3968"><span class="linenos">3968</span></a> <span class="n">anonymous_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-3969"><a href="#Parser-3969"><span class="linenos">3969</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3970"><a href="#Parser-3970"><span class="linenos">3970</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Parser-3971"><a href="#Parser-3971"><span class="linenos">3971</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-3972"><a href="#Parser-3972"><span class="linenos">3972</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">(</span><span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous_func</span><span class="p">)</span>
+</span><span id="Parser-3973"><a href="#Parser-3973"><span class="linenos">3973</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="n">any_token</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="n">tokens</span><span class="p">)</span>
+</span><span id="Parser-3974"><a href="#Parser-3974"><span class="linenos">3974</span></a> <span class="p">)</span>
+</span><span id="Parser-3975"><a href="#Parser-3975"><span class="linenos">3975</span></a>
+</span><span id="Parser-3976"><a href="#Parser-3976"><span class="linenos">3976</span></a> <span class="k">def</span> <span class="nf">_parse_function</span><span class="p">(</span>
+</span><span id="Parser-3977"><a href="#Parser-3977"><span class="linenos">3977</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-3978"><a href="#Parser-3978"><span class="linenos">3978</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-3979"><a href="#Parser-3979"><span class="linenos">3979</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-3980"><a href="#Parser-3980"><span class="linenos">3980</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Parser-3981"><a href="#Parser-3981"><span class="linenos">3981</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-3982"><a href="#Parser-3982"><span class="linenos">3982</span></a> <span class="c1"># This allows us to also parse {fn &lt;function&gt;} syntax (Snowflake, MySQL support this)</span>
+</span><span id="Parser-3983"><a href="#Parser-3983"><span class="linenos">3983</span></a> <span class="c1"># See: https://community.snowflake.com/s/article/SQL-Escape-Sequences</span>
+</span><span id="Parser-3984"><a href="#Parser-3984"><span class="linenos">3984</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-3985"><a href="#Parser-3985"><span class="linenos">3985</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Parser-3986"><a href="#Parser-3986"><span class="linenos">3986</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-3987"><a href="#Parser-3987"><span class="linenos">3987</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span>
+</span><span id="Parser-3988"><a href="#Parser-3988"><span class="linenos">3988</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;FN&quot;</span>
+</span><span id="Parser-3989"><a href="#Parser-3989"><span class="linenos">3989</span></a> <span class="p">):</span>
+</span><span id="Parser-3990"><a href="#Parser-3990"><span class="linenos">3990</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="Parser-3991"><a href="#Parser-3991"><span class="linenos">3991</span></a> <span class="n">fn_syntax</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-3992"><a href="#Parser-3992"><span class="linenos">3992</span></a>
+</span><span id="Parser-3993"><a href="#Parser-3993"><span class="linenos">3993</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_call</span><span class="p">(</span>
+</span><span id="Parser-3994"><a href="#Parser-3994"><span class="linenos">3994</span></a> <span class="n">functions</span><span class="o">=</span><span class="n">functions</span><span class="p">,</span> <span class="n">anonymous</span><span class="o">=</span><span class="n">anonymous</span><span class="p">,</span> <span class="n">optional_parens</span><span class="o">=</span><span class="n">optional_parens</span>
+</span><span id="Parser-3995"><a href="#Parser-3995"><span class="linenos">3995</span></a> <span class="p">)</span>
+</span><span id="Parser-3996"><a href="#Parser-3996"><span class="linenos">3996</span></a>
+</span><span id="Parser-3997"><a href="#Parser-3997"><span class="linenos">3997</span></a> <span class="k">if</span> <span class="n">fn_syntax</span><span class="p">:</span>
+</span><span id="Parser-3998"><a href="#Parser-3998"><span class="linenos">3998</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">)</span>
+</span><span id="Parser-3999"><a href="#Parser-3999"><span class="linenos">3999</span></a>
+</span><span id="Parser-4000"><a href="#Parser-4000"><span class="linenos">4000</span></a> <span class="k">return</span> <span class="n">func</span>
+</span><span id="Parser-4001"><a href="#Parser-4001"><span class="linenos">4001</span></a>
+</span><span id="Parser-4002"><a href="#Parser-4002"><span class="linenos">4002</span></a> <span class="k">def</span> <span class="nf">_parse_function_call</span><span class="p">(</span>
+</span><span id="Parser-4003"><a href="#Parser-4003"><span class="linenos">4003</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-4004"><a href="#Parser-4004"><span class="linenos">4004</span></a> <span class="n">functions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-4005"><a href="#Parser-4005"><span class="linenos">4005</span></a> <span class="n">anonymous</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-4006"><a href="#Parser-4006"><span class="linenos">4006</span></a> <span class="n">optional_parens</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Parser-4007"><a href="#Parser-4007"><span class="linenos">4007</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4008"><a href="#Parser-4008"><span class="linenos">4008</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-4009"><a href="#Parser-4009"><span class="linenos">4009</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4010"><a href="#Parser-4010"><span class="linenos">4010</span></a>
+</span><span id="Parser-4011"><a href="#Parser-4011"><span class="linenos">4011</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="Parser-4012"><a href="#Parser-4012"><span class="linenos">4012</span></a> <span class="n">token_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="Parser-4013"><a href="#Parser-4013"><span class="linenos">4013</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span>
+</span><span id="Parser-4014"><a href="#Parser-4014"><span class="linenos">4014</span></a> <span class="n">upper</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-4015"><a href="#Parser-4015"><span class="linenos">4015</span></a>
+</span><span id="Parser-4016"><a href="#Parser-4016"><span class="linenos">4016</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
+</span><span id="Parser-4017"><a href="#Parser-4017"><span class="linenos">4017</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">parser</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">INVALID_FUNC_NAME_TOKENS</span><span class="p">:</span>
+</span><span id="Parser-4018"><a href="#Parser-4018"><span class="linenos">4018</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4019"><a href="#Parser-4019"><span class="linenos">4019</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Parser-4020"><a href="#Parser-4020"><span class="linenos">4020</span></a>
+</span><span id="Parser-4021"><a href="#Parser-4021"><span class="linenos">4021</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">!=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">:</span>
+</span><span id="Parser-4022"><a href="#Parser-4022"><span class="linenos">4022</span></a> <span class="k">if</span> <span class="n">optional_parens</span> <span class="ow">and</span> <span class="n">token_type</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">:</span>
+</span><span id="Parser-4023"><a href="#Parser-4023"><span class="linenos">4023</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4024"><a href="#Parser-4024"><span class="linenos">4024</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_FUNCTIONS</span><span class="p">[</span><span class="n">token_type</span><span class="p">])</span>
</span><span id="Parser-4025"><a href="#Parser-4025"><span class="linenos">4025</span></a>
-</span><span id="Parser-4026"><a href="#Parser-4026"><span class="linenos">4026</span></a> <span class="k">if</span> <span class="n">subquery_predicate</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
-</span><span id="Parser-4027"><a href="#Parser-4027"><span class="linenos">4027</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">subquery_predicate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">())</span>
-</span><span id="Parser-4028"><a href="#Parser-4028"><span class="linenos">4028</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-4029"><a href="#Parser-4029"><span class="linenos">4029</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4026"><a href="#Parser-4026"><span class="linenos">4026</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4027"><a href="#Parser-4027"><span class="linenos">4027</span></a>
+</span><span id="Parser-4028"><a href="#Parser-4028"><span class="linenos">4028</span></a> <span class="k">if</span> <span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNC_TOKENS</span><span class="p">:</span>
+</span><span id="Parser-4029"><a href="#Parser-4029"><span class="linenos">4029</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4030"><a href="#Parser-4030"><span class="linenos">4030</span></a>
-</span><span id="Parser-4031"><a href="#Parser-4031"><span class="linenos">4031</span></a> <span class="k">if</span> <span class="n">functions</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-4032"><a href="#Parser-4032"><span class="linenos">4032</span></a> <span class="n">functions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS</span>
-</span><span id="Parser-4033"><a href="#Parser-4033"><span class="linenos">4033</span></a>
-</span><span id="Parser-4034"><a href="#Parser-4034"><span class="linenos">4034</span></a> <span class="n">function</span> <span class="o">=</span> <span class="n">functions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
-</span><span id="Parser-4035"><a href="#Parser-4035"><span class="linenos">4035</span></a>
-</span><span id="Parser-4036"><a href="#Parser-4036"><span class="linenos">4036</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">upper</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span>
-</span><span id="Parser-4037"><a href="#Parser-4037"><span class="linenos">4037</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="Parser-4031"><a href="#Parser-4031"><span class="linenos">4031</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="Parser-4032"><a href="#Parser-4032"><span class="linenos">4032</span></a>
+</span><span id="Parser-4033"><a href="#Parser-4033"><span class="linenos">4033</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTION_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
+</span><span id="Parser-4034"><a href="#Parser-4034"><span class="linenos">4034</span></a> <span class="k">if</span> <span class="n">parser</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
+</span><span id="Parser-4035"><a href="#Parser-4035"><span class="linenos">4035</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Parser-4036"><a href="#Parser-4036"><span class="linenos">4036</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4037"><a href="#Parser-4037"><span class="linenos">4037</span></a> <span class="n">subquery_predicate</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">SUBQUERY_PREDICATES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">token_type</span><span class="p">)</span>
</span><span id="Parser-4038"><a href="#Parser-4038"><span class="linenos">4038</span></a>
-</span><span id="Parser-4039"><a href="#Parser-4039"><span class="linenos">4039</span></a> <span class="k">if</span> <span class="n">function</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
-</span><span id="Parser-4040"><a href="#Parser-4040"><span class="linenos">4040</span></a> <span class="k">if</span> <span class="s2">&quot;dialect&quot;</span> <span class="ow">in</span> <span class="n">function</span><span class="o">.</span><span class="vm">__code__</span><span class="o">.</span><span class="n">co_varnames</span><span class="p">:</span>
-</span><span id="Parser-4041"><a href="#Parser-4041"><span class="linenos">4041</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
-</span><span id="Parser-4042"><a href="#Parser-4042"><span class="linenos">4042</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4043"><a href="#Parser-4043"><span class="linenos">4043</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-4044"><a href="#Parser-4044"><span class="linenos">4044</span></a>
-</span><span id="Parser-4045"><a href="#Parser-4045"><span class="linenos">4045</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-4046"><a href="#Parser-4046"><span class="linenos">4046</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span>
-</span><span id="Parser-4047"><a href="#Parser-4047"><span class="linenos">4047</span></a> <span class="n">func</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
+</span><span id="Parser-4039"><a href="#Parser-4039"><span class="linenos">4039</span></a> <span class="k">if</span> <span class="n">subquery_predicate</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SELECT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
+</span><span id="Parser-4040"><a href="#Parser-4040"><span class="linenos">4040</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">subquery_predicate</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">())</span>
+</span><span id="Parser-4041"><a href="#Parser-4041"><span class="linenos">4041</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-4042"><a href="#Parser-4042"><span class="linenos">4042</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4043"><a href="#Parser-4043"><span class="linenos">4043</span></a>
+</span><span id="Parser-4044"><a href="#Parser-4044"><span class="linenos">4044</span></a> <span class="k">if</span> <span class="n">functions</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-4045"><a href="#Parser-4045"><span class="linenos">4045</span></a> <span class="n">functions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS</span>
+</span><span id="Parser-4046"><a href="#Parser-4046"><span class="linenos">4046</span></a>
+</span><span id="Parser-4047"><a href="#Parser-4047"><span class="linenos">4047</span></a> <span class="n">function</span> <span class="o">=</span> <span class="n">functions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">upper</span><span class="p">)</span>
</span><span id="Parser-4048"><a href="#Parser-4048"><span class="linenos">4048</span></a>
-</span><span id="Parser-4049"><a href="#Parser-4049"><span class="linenos">4049</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">func</span>
-</span><span id="Parser-4050"><a href="#Parser-4050"><span class="linenos">4050</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4051"><a href="#Parser-4051"><span class="linenos">4051</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-4052"><a href="#Parser-4052"><span class="linenos">4052</span></a>
-</span><span id="Parser-4053"><a href="#Parser-4053"><span class="linenos">4053</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">Expression</span><span class="p">):</span>
-</span><span id="Parser-4054"><a href="#Parser-4054"><span class="linenos">4054</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
-</span><span id="Parser-4055"><a href="#Parser-4055"><span class="linenos">4055</span></a>
-</span><span id="Parser-4056"><a href="#Parser-4056"><span class="linenos">4056</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4057"><a href="#Parser-4057"><span class="linenos">4057</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4058"><a href="#Parser-4058"><span class="linenos">4058</span></a>
-</span><span id="Parser-4059"><a href="#Parser-4059"><span class="linenos">4059</span></a> <span class="k">def</span> <span class="nf">_parse_function_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4060"><a href="#Parser-4060"><span class="linenos">4060</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
+</span><span id="Parser-4049"><a href="#Parser-4049"><span class="linenos">4049</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="n">upper</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">FUNCTIONS_WITH_ALIASED_ARGS</span>
+</span><span id="Parser-4050"><a href="#Parser-4050"><span class="linenos">4050</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">))</span>
+</span><span id="Parser-4051"><a href="#Parser-4051"><span class="linenos">4051</span></a>
+</span><span id="Parser-4052"><a href="#Parser-4052"><span class="linenos">4052</span></a> <span class="k">if</span> <span class="n">function</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">anonymous</span><span class="p">:</span>
+</span><span id="Parser-4053"><a href="#Parser-4053"><span class="linenos">4053</span></a> <span class="k">if</span> <span class="s2">&quot;dialect&quot;</span> <span class="ow">in</span> <span class="n">function</span><span class="o">.</span><span class="vm">__code__</span><span class="o">.</span><span class="n">co_varnames</span><span class="p">:</span>
+</span><span id="Parser-4054"><a href="#Parser-4054"><span class="linenos">4054</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="p">)</span>
+</span><span id="Parser-4055"><a href="#Parser-4055"><span class="linenos">4055</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4056"><a href="#Parser-4056"><span class="linenos">4056</span></a> <span class="n">func</span> <span class="o">=</span> <span class="n">function</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4057"><a href="#Parser-4057"><span class="linenos">4057</span></a>
+</span><span id="Parser-4058"><a href="#Parser-4058"><span class="linenos">4058</span></a> <span class="n">func</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4059"><a href="#Parser-4059"><span class="linenos">4059</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">NORMALIZE_FUNCTIONS</span><span class="p">:</span>
+</span><span id="Parser-4060"><a href="#Parser-4060"><span class="linenos">4060</span></a> <span class="n">func</span><span class="o">.</span><span class="n">meta</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">this</span>
</span><span id="Parser-4061"><a href="#Parser-4061"><span class="linenos">4061</span></a>
-</span><span id="Parser-4062"><a href="#Parser-4062"><span class="linenos">4062</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
-</span><span id="Parser-4063"><a href="#Parser-4063"><span class="linenos">4063</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4064"><a href="#Parser-4064"><span class="linenos">4064</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4065"><a href="#Parser-4065"><span class="linenos">4065</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-4066"><a href="#Parser-4066"><span class="linenos">4066</span></a>
-</span><span id="Parser-4067"><a href="#Parser-4067"><span class="linenos">4067</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
-</span><span id="Parser-4068"><a href="#Parser-4068"><span class="linenos">4068</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
-</span><span id="Parser-4069"><a href="#Parser-4069"><span class="linenos">4069</span></a>
-</span><span id="Parser-4070"><a href="#Parser-4070"><span class="linenos">4070</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4071"><a href="#Parser-4071"><span class="linenos">4071</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4072"><a href="#Parser-4072"><span class="linenos">4072</span></a>
-</span><span id="Parser-4073"><a href="#Parser-4073"><span class="linenos">4073</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_parameter</span><span class="p">)</span>
-</span><span id="Parser-4074"><a href="#Parser-4074"><span class="linenos">4074</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-4075"><a href="#Parser-4075"><span class="linenos">4075</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4076"><a href="#Parser-4076"><span class="linenos">4076</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wrapped</span><span class="o">=</span><span class="kc">True</span>
-</span><span id="Parser-4077"><a href="#Parser-4077"><span class="linenos">4077</span></a> <span class="p">)</span>
-</span><span id="Parser-4078"><a href="#Parser-4078"><span class="linenos">4078</span></a>
-</span><span id="Parser-4079"><a href="#Parser-4079"><span class="linenos">4079</span></a> <span class="k">def</span> <span class="nf">_parse_introducer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
-</span><span id="Parser-4080"><a href="#Parser-4080"><span class="linenos">4080</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-4081"><a href="#Parser-4081"><span class="linenos">4081</span></a> <span class="k">if</span> <span class="n">literal</span><span class="p">:</span>
-</span><span id="Parser-4082"><a href="#Parser-4082"><span class="linenos">4082</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">literal</span><span class="p">)</span>
-</span><span id="Parser-4083"><a href="#Parser-4083"><span class="linenos">4083</span></a>
-</span><span id="Parser-4084"><a href="#Parser-4084"><span class="linenos">4084</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-4062"><a href="#Parser-4062"><span class="linenos">4062</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">func</span>
+</span><span id="Parser-4063"><a href="#Parser-4063"><span class="linenos">4063</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4064"><a href="#Parser-4064"><span class="linenos">4064</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Anonymous</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4065"><a href="#Parser-4065"><span class="linenos">4065</span></a>
+</span><span id="Parser-4066"><a href="#Parser-4066"><span class="linenos">4066</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">Expression</span><span class="p">):</span>
+</span><span id="Parser-4067"><a href="#Parser-4067"><span class="linenos">4067</span></a> <span class="n">this</span><span class="o">.</span><span class="n">add_comments</span><span class="p">(</span><span class="n">comments</span><span class="p">)</span>
+</span><span id="Parser-4068"><a href="#Parser-4068"><span class="linenos">4068</span></a>
+</span><span id="Parser-4069"><a href="#Parser-4069"><span class="linenos">4069</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4070"><a href="#Parser-4070"><span class="linenos">4070</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4071"><a href="#Parser-4071"><span class="linenos">4071</span></a>
+</span><span id="Parser-4072"><a href="#Parser-4072"><span class="linenos">4072</span></a> <span class="k">def</span> <span class="nf">_parse_function_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4073"><a href="#Parser-4073"><span class="linenos">4073</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
+</span><span id="Parser-4074"><a href="#Parser-4074"><span class="linenos">4074</span></a>
+</span><span id="Parser-4075"><a href="#Parser-4075"><span class="linenos">4075</span></a> <span class="k">def</span> <span class="nf">_parse_user_defined_function</span><span class="p">(</span>
+</span><span id="Parser-4076"><a href="#Parser-4076"><span class="linenos">4076</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4077"><a href="#Parser-4077"><span class="linenos">4077</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4078"><a href="#Parser-4078"><span class="linenos">4078</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-4079"><a href="#Parser-4079"><span class="linenos">4079</span></a>
+</span><span id="Parser-4080"><a href="#Parser-4080"><span class="linenos">4080</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
+</span><span id="Parser-4081"><a href="#Parser-4081"><span class="linenos">4081</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">())</span>
+</span><span id="Parser-4082"><a href="#Parser-4082"><span class="linenos">4082</span></a>
+</span><span id="Parser-4083"><a href="#Parser-4083"><span class="linenos">4083</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-4084"><a href="#Parser-4084"><span class="linenos">4084</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4085"><a href="#Parser-4085"><span class="linenos">4085</span></a>
-</span><span id="Parser-4086"><a href="#Parser-4086"><span class="linenos">4086</span></a> <span class="k">def</span> <span class="nf">_parse_session_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</span><span class="p">:</span>
-</span><span id="Parser-4087"><a href="#Parser-4087"><span class="linenos">4087</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4088"><a href="#Parser-4088"><span class="linenos">4088</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-4089"><a href="#Parser-4089"><span class="linenos">4089</span></a>
-</span><span id="Parser-4090"><a href="#Parser-4090"><span class="linenos">4090</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
-</span><span id="Parser-4091"><a href="#Parser-4091"><span class="linenos">4091</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
-</span><span id="Parser-4092"><a href="#Parser-4092"><span class="linenos">4092</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-4093"><a href="#Parser-4093"><span class="linenos">4093</span></a>
-</span><span id="Parser-4094"><a href="#Parser-4094"><span class="linenos">4094</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="Parser-4095"><a href="#Parser-4095"><span class="linenos">4095</span></a>
-</span><span id="Parser-4096"><a href="#Parser-4096"><span class="linenos">4096</span></a> <span class="k">def</span> <span class="nf">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4097"><a href="#Parser-4097"><span class="linenos">4097</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-4086"><a href="#Parser-4086"><span class="linenos">4086</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_function_parameter</span><span class="p">)</span>
+</span><span id="Parser-4087"><a href="#Parser-4087"><span class="linenos">4087</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-4088"><a href="#Parser-4088"><span class="linenos">4088</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4089"><a href="#Parser-4089"><span class="linenos">4089</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UserDefinedFunction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">wrapped</span><span class="o">=</span><span class="kc">True</span>
+</span><span id="Parser-4090"><a href="#Parser-4090"><span class="linenos">4090</span></a> <span class="p">)</span>
+</span><span id="Parser-4091"><a href="#Parser-4091"><span class="linenos">4091</span></a>
+</span><span id="Parser-4092"><a href="#Parser-4092"><span class="linenos">4092</span></a> <span class="k">def</span> <span class="nf">_parse_introducer</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">:</span>
+</span><span id="Parser-4093"><a href="#Parser-4093"><span class="linenos">4093</span></a> <span class="n">literal</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-4094"><a href="#Parser-4094"><span class="linenos">4094</span></a> <span class="k">if</span> <span class="n">literal</span><span class="p">:</span>
+</span><span id="Parser-4095"><a href="#Parser-4095"><span class="linenos">4095</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Introducer</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">literal</span><span class="p">)</span>
+</span><span id="Parser-4096"><a href="#Parser-4096"><span class="linenos">4096</span></a>
+</span><span id="Parser-4097"><a href="#Parser-4097"><span class="linenos">4097</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">token</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
</span><span id="Parser-4098"><a href="#Parser-4098"><span class="linenos">4098</span></a>
-</span><span id="Parser-4099"><a href="#Parser-4099"><span class="linenos">4099</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4100"><a href="#Parser-4100"><span class="linenos">4100</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
-</span><span id="Parser-4101"><a href="#Parser-4101"><span class="linenos">4101</span></a> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span>
-</span><span id="Parser-4102"><a href="#Parser-4102"><span class="linenos">4102</span></a> <span class="p">)</span>
-</span><span id="Parser-4103"><a href="#Parser-4103"><span class="linenos">4103</span></a>
-</span><span id="Parser-4104"><a href="#Parser-4104"><span class="linenos">4104</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4105"><a href="#Parser-4105"><span class="linenos">4105</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-4106"><a href="#Parser-4106"><span class="linenos">4106</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4107"><a href="#Parser-4107"><span class="linenos">4107</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()]</span>
+</span><span id="Parser-4099"><a href="#Parser-4099"><span class="linenos">4099</span></a> <span class="k">def</span> <span class="nf">_parse_session_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</span><span class="p">:</span>
+</span><span id="Parser-4100"><a href="#Parser-4100"><span class="linenos">4100</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4101"><a href="#Parser-4101"><span class="linenos">4101</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-4102"><a href="#Parser-4102"><span class="linenos">4102</span></a>
+</span><span id="Parser-4103"><a href="#Parser-4103"><span class="linenos">4103</span></a> <span class="k">if</span> <span class="n">this</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DOT</span><span class="p">):</span>
+</span><span id="Parser-4104"><a href="#Parser-4104"><span class="linenos">4104</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span>
+</span><span id="Parser-4105"><a href="#Parser-4105"><span class="linenos">4105</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-4106"><a href="#Parser-4106"><span class="linenos">4106</span></a>
+</span><span id="Parser-4107"><a href="#Parser-4107"><span class="linenos">4107</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SessionParameter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
</span><span id="Parser-4108"><a href="#Parser-4108"><span class="linenos">4108</span></a>
-</span><span id="Parser-4109"><a href="#Parser-4109"><span class="linenos">4109</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">):</span>
-</span><span id="Parser-4110"><a href="#Parser-4110"><span class="linenos">4110</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-4109"><a href="#Parser-4109"><span class="linenos">4109</span></a> <span class="k">def</span> <span class="nf">_parse_lambda</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4110"><a href="#Parser-4110"><span class="linenos">4110</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-4111"><a href="#Parser-4111"><span class="linenos">4111</span></a>
-</span><span id="Parser-4112"><a href="#Parser-4112"><span class="linenos">4112</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-4113"><a href="#Parser-4113"><span class="linenos">4113</span></a>
-</span><span id="Parser-4114"><a href="#Parser-4114"><span class="linenos">4114</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="Parser-4115"><a href="#Parser-4115"><span class="linenos">4115</span></a>
-</span><span id="Parser-4116"><a href="#Parser-4116"><span class="linenos">4116</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
-</span><span id="Parser-4117"><a href="#Parser-4117"><span class="linenos">4117</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4118"><a href="#Parser-4118"><span class="linenos">4118</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
-</span><span id="Parser-4119"><a href="#Parser-4119"><span class="linenos">4119</span></a> <span class="p">)</span>
-</span><span id="Parser-4120"><a href="#Parser-4120"><span class="linenos">4120</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4121"><a href="#Parser-4121"><span class="linenos">4121</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="Parser-4122"><a href="#Parser-4122"><span class="linenos">4122</span></a>
-</span><span id="Parser-4123"><a href="#Parser-4123"><span class="linenos">4123</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)))</span>
+</span><span id="Parser-4112"><a href="#Parser-4112"><span class="linenos">4112</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-4113"><a href="#Parser-4113"><span class="linenos">4113</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span>
+</span><span id="Parser-4114"><a href="#Parser-4114"><span class="linenos">4114</span></a> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">)</span>
+</span><span id="Parser-4115"><a href="#Parser-4115"><span class="linenos">4115</span></a> <span class="p">)</span>
+</span><span id="Parser-4116"><a href="#Parser-4116"><span class="linenos">4116</span></a>
+</span><span id="Parser-4117"><a href="#Parser-4117"><span class="linenos">4117</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">):</span>
+</span><span id="Parser-4118"><a href="#Parser-4118"><span class="linenos">4118</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-4119"><a href="#Parser-4119"><span class="linenos">4119</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4120"><a href="#Parser-4120"><span class="linenos">4120</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()]</span>
+</span><span id="Parser-4121"><a href="#Parser-4121"><span class="linenos">4121</span></a>
+</span><span id="Parser-4122"><a href="#Parser-4122"><span class="linenos">4122</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">):</span>
+</span><span id="Parser-4123"><a href="#Parser-4123"><span class="linenos">4123</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">LAMBDAS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">expressions</span><span class="p">)</span>
</span><span id="Parser-4124"><a href="#Parser-4124"><span class="linenos">4124</span></a>
-</span><span id="Parser-4125"><a href="#Parser-4125"><span class="linenos">4125</span></a> <span class="k">def</span> <span class="nf">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4126"><a href="#Parser-4126"><span class="linenos">4126</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-4127"><a href="#Parser-4127"><span class="linenos">4127</span></a>
-</span><span id="Parser-4128"><a href="#Parser-4128"><span class="linenos">4128</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
-</span><span id="Parser-4129"><a href="#Parser-4129"><span class="linenos">4129</span></a> <span class="k">try</span><span class="p">:</span>
-</span><span id="Parser-4130"><a href="#Parser-4130"><span class="linenos">4130</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="Parser-4131"><a href="#Parser-4131"><span class="linenos">4131</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4132"><a href="#Parser-4132"><span class="linenos">4132</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
-</span><span id="Parser-4133"><a href="#Parser-4133"><span class="linenos">4133</span></a> <span class="k">pass</span>
-</span><span id="Parser-4134"><a href="#Parser-4134"><span class="linenos">4134</span></a> <span class="k">finally</span><span class="p">:</span>
-</span><span id="Parser-4135"><a href="#Parser-4135"><span class="linenos">4135</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
-</span><span id="Parser-4136"><a href="#Parser-4136"><span class="linenos">4136</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-4125"><a href="#Parser-4125"><span class="linenos">4125</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-4126"><a href="#Parser-4126"><span class="linenos">4126</span></a>
+</span><span id="Parser-4127"><a href="#Parser-4127"><span class="linenos">4127</span></a> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="Parser-4128"><a href="#Parser-4128"><span class="linenos">4128</span></a>
+</span><span id="Parser-4129"><a href="#Parser-4129"><span class="linenos">4129</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
+</span><span id="Parser-4130"><a href="#Parser-4130"><span class="linenos">4130</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4131"><a href="#Parser-4131"><span class="linenos">4131</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="Parser-4132"><a href="#Parser-4132"><span class="linenos">4132</span></a> <span class="p">)</span>
+</span><span id="Parser-4133"><a href="#Parser-4133"><span class="linenos">4133</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4134"><a href="#Parser-4134"><span class="linenos">4134</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select_or_expression</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="Parser-4135"><a href="#Parser-4135"><span class="linenos">4135</span></a>
+</span><span id="Parser-4136"><a href="#Parser-4136"><span class="linenos">4136</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)))</span>
</span><span id="Parser-4137"><a href="#Parser-4137"><span class="linenos">4137</span></a>
-</span><span id="Parser-4138"><a href="#Parser-4138"><span class="linenos">4138</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4139"><a href="#Parser-4139"><span class="linenos">4139</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4138"><a href="#Parser-4138"><span class="linenos">4138</span></a> <span class="k">def</span> <span class="nf">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4139"><a href="#Parser-4139"><span class="linenos">4139</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-4140"><a href="#Parser-4140"><span class="linenos">4140</span></a>
-</span><span id="Parser-4141"><a href="#Parser-4141"><span class="linenos">4141</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">())</span>
-</span><span id="Parser-4142"><a href="#Parser-4142"><span class="linenos">4142</span></a>
-</span><span id="Parser-4143"><a href="#Parser-4143"><span class="linenos">4143</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-4144"><a href="#Parser-4144"><span class="linenos">4144</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-4145"><a href="#Parser-4145"><span class="linenos">4145</span></a>
-</span><span id="Parser-4146"><a href="#Parser-4146"><span class="linenos">4146</span></a> <span class="k">def</span> <span class="nf">_parse_field_def</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4147"><a href="#Parser-4147"><span class="linenos">4147</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Parser-4148"><a href="#Parser-4148"><span class="linenos">4148</span></a>
-</span><span id="Parser-4149"><a href="#Parser-4149"><span class="linenos">4149</span></a> <span class="k">def</span> <span class="nf">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4150"><a href="#Parser-4150"><span class="linenos">4150</span></a> <span class="c1"># column defs are not really columns, they&#39;re identifiers</span>
-</span><span id="Parser-4151"><a href="#Parser-4151"><span class="linenos">4151</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
-</span><span id="Parser-4152"><a href="#Parser-4152"><span class="linenos">4152</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Parser-4141"><a href="#Parser-4141"><span class="linenos">4141</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="p">:</span>
+</span><span id="Parser-4142"><a href="#Parser-4142"><span class="linenos">4142</span></a> <span class="k">try</span><span class="p">:</span>
+</span><span id="Parser-4143"><a href="#Parser-4143"><span class="linenos">4143</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="Parser-4144"><a href="#Parser-4144"><span class="linenos">4144</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4145"><a href="#Parser-4145"><span class="linenos">4145</span></a> <span class="k">except</span> <span class="n">ParseError</span><span class="p">:</span>
+</span><span id="Parser-4146"><a href="#Parser-4146"><span class="linenos">4146</span></a> <span class="k">pass</span>
+</span><span id="Parser-4147"><a href="#Parser-4147"><span class="linenos">4147</span></a> <span class="k">finally</span><span class="p">:</span>
+</span><span id="Parser-4148"><a href="#Parser-4148"><span class="linenos">4148</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
+</span><span id="Parser-4149"><a href="#Parser-4149"><span class="linenos">4149</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-4150"><a href="#Parser-4150"><span class="linenos">4150</span></a>
+</span><span id="Parser-4151"><a href="#Parser-4151"><span class="linenos">4151</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-4152"><a href="#Parser-4152"><span class="linenos">4152</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4153"><a href="#Parser-4153"><span class="linenos">4153</span></a>
-</span><span id="Parser-4154"><a href="#Parser-4154"><span class="linenos">4154</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4154"><a href="#Parser-4154"><span class="linenos">4154</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">())</span>
</span><span id="Parser-4155"><a href="#Parser-4155"><span class="linenos">4155</span></a>
-</span><span id="Parser-4156"><a href="#Parser-4156"><span class="linenos">4156</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;ORDINALITY&quot;</span><span class="p">):</span>
-</span><span id="Parser-4157"><a href="#Parser-4157"><span class="linenos">4157</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">ordinality</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4156"><a href="#Parser-4156"><span class="linenos">4156</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-4157"><a href="#Parser-4157"><span class="linenos">4157</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Schema</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
</span><span id="Parser-4158"><a href="#Parser-4158"><span class="linenos">4158</span></a>
-</span><span id="Parser-4159"><a href="#Parser-4159"><span class="linenos">4159</span></a> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4160"><a href="#Parser-4160"><span class="linenos">4160</span></a>
-</span><span id="Parser-4161"><a href="#Parser-4161"><span class="linenos">4161</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
-</span><span id="Parser-4162"><a href="#Parser-4162"><span class="linenos">4162</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-4163"><a href="#Parser-4163"><span class="linenos">4163</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4164"><a href="#Parser-4164"><span class="linenos">4164</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">,</span>
-</span><span id="Parser-4165"><a href="#Parser-4165"><span class="linenos">4165</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="Parser-4166"><a href="#Parser-4166"><span class="linenos">4166</span></a> <span class="n">persisted</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PERSISTED&quot;</span><span class="p">),</span>
-</span><span id="Parser-4167"><a href="#Parser-4167"><span class="linenos">4167</span></a> <span class="n">not_null</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
-</span><span id="Parser-4168"><a href="#Parser-4168"><span class="linenos">4168</span></a> <span class="p">)</span>
-</span><span id="Parser-4169"><a href="#Parser-4169"><span class="linenos">4169</span></a> <span class="p">)</span>
-</span><span id="Parser-4170"><a href="#Parser-4170"><span class="linenos">4170</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-4171"><a href="#Parser-4171"><span class="linenos">4171</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
-</span><span id="Parser-4172"><a href="#Parser-4172"><span class="linenos">4172</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-4173"><a href="#Parser-4173"><span class="linenos">4173</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TransformColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
-</span><span id="Parser-4174"><a href="#Parser-4174"><span class="linenos">4174</span></a> <span class="p">)</span>
-</span><span id="Parser-4175"><a href="#Parser-4175"><span class="linenos">4175</span></a>
-</span><span id="Parser-4176"><a href="#Parser-4176"><span class="linenos">4176</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-4177"><a href="#Parser-4177"><span class="linenos">4177</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_constraint</span><span class="p">()</span>
-</span><span id="Parser-4178"><a href="#Parser-4178"><span class="linenos">4178</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
-</span><span id="Parser-4179"><a href="#Parser-4179"><span class="linenos">4179</span></a> <span class="k">break</span>
-</span><span id="Parser-4180"><a href="#Parser-4180"><span class="linenos">4180</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
-</span><span id="Parser-4181"><a href="#Parser-4181"><span class="linenos">4181</span></a>
-</span><span id="Parser-4182"><a href="#Parser-4182"><span class="linenos">4182</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">constraints</span><span class="p">:</span>
-</span><span id="Parser-4183"><a href="#Parser-4183"><span class="linenos">4183</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4184"><a href="#Parser-4184"><span class="linenos">4184</span></a>
-</span><span id="Parser-4185"><a href="#Parser-4185"><span class="linenos">4185</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">constraints</span><span class="o">=</span><span class="n">constraints</span><span class="p">)</span>
-</span><span id="Parser-4186"><a href="#Parser-4186"><span class="linenos">4186</span></a>
-</span><span id="Parser-4187"><a href="#Parser-4187"><span class="linenos">4187</span></a> <span class="k">def</span> <span class="nf">_parse_auto_increment</span><span class="p">(</span>
-</span><span id="Parser-4188"><a href="#Parser-4188"><span class="linenos">4188</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-4189"><a href="#Parser-4189"><span class="linenos">4189</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">:</span>
-</span><span id="Parser-4190"><a href="#Parser-4190"><span class="linenos">4190</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4191"><a href="#Parser-4191"><span class="linenos">4191</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4192"><a href="#Parser-4192"><span class="linenos">4192</span></a>
-</span><span id="Parser-4193"><a href="#Parser-4193"><span class="linenos">4193</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-4194"><a href="#Parser-4194"><span class="linenos">4194</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
-</span><span id="Parser-4195"><a href="#Parser-4195"><span class="linenos">4195</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Parser-4196"><a href="#Parser-4196"><span class="linenos">4196</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-4197"><a href="#Parser-4197"><span class="linenos">4197</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">):</span>
-</span><span id="Parser-4198"><a href="#Parser-4198"><span class="linenos">4198</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-4199"><a href="#Parser-4199"><span class="linenos">4199</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">)</span>
-</span><span id="Parser-4200"><a href="#Parser-4200"><span class="linenos">4200</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-4201"><a href="#Parser-4201"><span class="linenos">4201</span></a>
-</span><span id="Parser-4202"><a href="#Parser-4202"><span class="linenos">4202</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">increment</span><span class="p">:</span>
-</span><span id="Parser-4203"><a href="#Parser-4203"><span class="linenos">4203</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span><span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">increment</span><span class="o">=</span><span class="n">increment</span><span class="p">)</span>
-</span><span id="Parser-4204"><a href="#Parser-4204"><span class="linenos">4204</span></a>
-</span><span id="Parser-4205"><a href="#Parser-4205"><span class="linenos">4205</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">()</span>
-</span><span id="Parser-4206"><a href="#Parser-4206"><span class="linenos">4206</span></a>
-</span><span id="Parser-4207"><a href="#Parser-4207"><span class="linenos">4207</span></a> <span class="k">def</span> <span class="nf">_parse_auto_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">]:</span>
-</span><span id="Parser-4208"><a href="#Parser-4208"><span class="linenos">4208</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;REFRESH&quot;</span><span class="p">):</span>
-</span><span id="Parser-4209"><a href="#Parser-4209"><span class="linenos">4209</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-4210"><a href="#Parser-4210"><span class="linenos">4210</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4211"><a href="#Parser-4211"><span class="linenos">4211</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Parser-4212"><a href="#Parser-4212"><span class="linenos">4212</span></a>
-</span><span id="Parser-4213"><a href="#Parser-4213"><span class="linenos">4213</span></a> <span class="k">def</span> <span class="nf">_parse_compress</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">:</span>
-</span><span id="Parser-4214"><a href="#Parser-4214"><span class="linenos">4214</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-4215"><a href="#Parser-4215"><span class="linenos">4215</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4216"><a href="#Parser-4216"><span class="linenos">4216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
-</span><span id="Parser-4217"><a href="#Parser-4217"><span class="linenos">4217</span></a> <span class="p">)</span>
-</span><span id="Parser-4218"><a href="#Parser-4218"><span class="linenos">4218</span></a>
-</span><span id="Parser-4219"><a href="#Parser-4219"><span class="linenos">4219</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4220"><a href="#Parser-4220"><span class="linenos">4220</span></a>
-</span><span id="Parser-4221"><a href="#Parser-4221"><span class="linenos">4221</span></a> <span class="k">def</span> <span class="nf">_parse_generated_as_identity</span><span class="p">(</span>
-</span><span id="Parser-4222"><a href="#Parser-4222"><span class="linenos">4222</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-4223"><a href="#Parser-4223"><span class="linenos">4223</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="p">(</span>
-</span><span id="Parser-4224"><a href="#Parser-4224"><span class="linenos">4224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
-</span><span id="Parser-4225"><a href="#Parser-4225"><span class="linenos">4225</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span>
-</span><span id="Parser-4226"><a href="#Parser-4226"><span class="linenos">4226</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span>
-</span><span id="Parser-4227"><a href="#Parser-4227"><span class="linenos">4227</span></a> <span class="p">):</span>
-</span><span id="Parser-4228"><a href="#Parser-4228"><span class="linenos">4228</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">):</span>
-</span><span id="Parser-4229"><a href="#Parser-4229"><span class="linenos">4229</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
-</span><span id="Parser-4230"><a href="#Parser-4230"><span class="linenos">4230</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4231"><a href="#Parser-4231"><span class="linenos">4231</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">on_null</span><span class="o">=</span><span class="n">on_null</span>
-</span><span id="Parser-4232"><a href="#Parser-4232"><span class="linenos">4232</span></a> <span class="p">)</span>
-</span><span id="Parser-4233"><a href="#Parser-4233"><span class="linenos">4233</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4234"><a href="#Parser-4234"><span class="linenos">4234</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALWAYS&quot;</span><span class="p">)</span>
-</span><span id="Parser-4235"><a href="#Parser-4235"><span class="linenos">4235</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4236"><a href="#Parser-4236"><span class="linenos">4236</span></a>
-</span><span id="Parser-4237"><a href="#Parser-4237"><span class="linenos">4237</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
-</span><span id="Parser-4238"><a href="#Parser-4238"><span class="linenos">4238</span></a>
-</span><span id="Parser-4239"><a href="#Parser-4239"><span class="linenos">4239</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
-</span><span id="Parser-4240"><a href="#Parser-4240"><span class="linenos">4240</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">)</span>
-</span><span id="Parser-4241"><a href="#Parser-4241"><span class="linenos">4241</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span>
-</span><span id="Parser-4242"><a href="#Parser-4242"><span class="linenos">4242</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
-</span><span id="Parser-4243"><a href="#Parser-4243"><span class="linenos">4243</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HIDDEN&quot;</span><span class="p">)</span>
-</span><span id="Parser-4244"><a href="#Parser-4244"><span class="linenos">4244</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">hidden</span><span class="o">=</span><span class="n">hidden</span><span class="p">)</span>
-</span><span id="Parser-4245"><a href="#Parser-4245"><span class="linenos">4245</span></a>
-</span><span id="Parser-4246"><a href="#Parser-4246"><span class="linenos">4246</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTITY&quot;</span><span class="p">)</span>
-</span><span id="Parser-4247"><a href="#Parser-4247"><span class="linenos">4247</span></a>
-</span><span id="Parser-4248"><a href="#Parser-4248"><span class="linenos">4248</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4249"><a href="#Parser-4249"><span class="linenos">4249</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
-</span><span id="Parser-4250"><a href="#Parser-4250"><span class="linenos">4250</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4251"><a href="#Parser-4251"><span class="linenos">4251</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
-</span><span id="Parser-4252"><a href="#Parser-4252"><span class="linenos">4252</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4253"><a href="#Parser-4253"><span class="linenos">4253</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MINVALUE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4254"><a href="#Parser-4254"><span class="linenos">4254</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4255"><a href="#Parser-4255"><span class="linenos">4255</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAXVALUE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4256"><a href="#Parser-4256"><span class="linenos">4256</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4257"><a href="#Parser-4257"><span class="linenos">4257</span></a>
-</span><span id="Parser-4258"><a href="#Parser-4258"><span class="linenos">4258</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4259"><a href="#Parser-4259"><span class="linenos">4259</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4260"><a href="#Parser-4260"><span class="linenos">4260</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4261"><a href="#Parser-4261"><span class="linenos">4261</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-4262"><a href="#Parser-4262"><span class="linenos">4262</span></a>
-</span><span id="Parser-4263"><a href="#Parser-4263"><span class="linenos">4263</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">identity</span><span class="p">:</span>
-</span><span id="Parser-4264"><a href="#Parser-4264"><span class="linenos">4264</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4265"><a href="#Parser-4265"><span class="linenos">4265</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-4266"><a href="#Parser-4266"><span class="linenos">4266</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
-</span><span id="Parser-4267"><a href="#Parser-4267"><span class="linenos">4267</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="Parser-4268"><a href="#Parser-4268"><span class="linenos">4268</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-</span><span id="Parser-4269"><a href="#Parser-4269"><span class="linenos">4269</span></a>
-</span><span id="Parser-4270"><a href="#Parser-4270"><span class="linenos">4270</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-4271"><a href="#Parser-4271"><span class="linenos">4271</span></a>
-</span><span id="Parser-4272"><a href="#Parser-4272"><span class="linenos">4272</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4273"><a href="#Parser-4273"><span class="linenos">4273</span></a>
-</span><span id="Parser-4274"><a href="#Parser-4274"><span class="linenos">4274</span></a> <span class="k">def</span> <span class="nf">_parse_inline</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">:</span>
-</span><span id="Parser-4275"><a href="#Parser-4275"><span class="linenos">4275</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">)</span>
-</span><span id="Parser-4276"><a href="#Parser-4276"><span class="linenos">4276</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4277"><a href="#Parser-4277"><span class="linenos">4277</span></a>
-</span><span id="Parser-4278"><a href="#Parser-4278"><span class="linenos">4278</span></a> <span class="k">def</span> <span class="nf">_parse_not_constraint</span><span class="p">(</span>
-</span><span id="Parser-4279"><a href="#Parser-4279"><span class="linenos">4279</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-4280"><a href="#Parser-4280"><span class="linenos">4280</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4281"><a href="#Parser-4281"><span class="linenos">4281</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
-</span><span id="Parser-4282"><a href="#Parser-4282"><span class="linenos">4282</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">)</span>
-</span><span id="Parser-4283"><a href="#Parser-4283"><span class="linenos">4283</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASESPECIFIC&quot;</span><span class="p">):</span>
-</span><span id="Parser-4284"><a href="#Parser-4284"><span class="linenos">4284</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4285"><a href="#Parser-4285"><span class="linenos">4285</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLICATION&quot;</span><span class="p">):</span>
-</span><span id="Parser-4286"><a href="#Parser-4286"><span class="linenos">4286</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotForReplicationColumnConstraint</span><span class="p">)</span>
-</span><span id="Parser-4287"><a href="#Parser-4287"><span class="linenos">4287</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4288"><a href="#Parser-4288"><span class="linenos">4288</span></a>
-</span><span id="Parser-4289"><a href="#Parser-4289"><span class="linenos">4289</span></a> <span class="k">def</span> <span class="nf">_parse_column_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4290"><a href="#Parser-4290"><span class="linenos">4290</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">):</span>
-</span><span id="Parser-4291"><a href="#Parser-4291"><span class="linenos">4291</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-4292"><a href="#Parser-4292"><span class="linenos">4292</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4293"><a href="#Parser-4293"><span class="linenos">4293</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4294"><a href="#Parser-4294"><span class="linenos">4294</span></a>
-</span><span id="Parser-4295"><a href="#Parser-4295"><span class="linenos">4295</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">):</span>
-</span><span id="Parser-4296"><a href="#Parser-4296"><span class="linenos">4296</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4297"><a href="#Parser-4297"><span class="linenos">4297</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
-</span><span id="Parser-4298"><a href="#Parser-4298"><span class="linenos">4298</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4299"><a href="#Parser-4299"><span class="linenos">4299</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">),</span>
-</span><span id="Parser-4300"><a href="#Parser-4300"><span class="linenos">4300</span></a> <span class="p">)</span>
+</span><span id="Parser-4159"><a href="#Parser-4159"><span class="linenos">4159</span></a> <span class="k">def</span> <span class="nf">_parse_field_def</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4160"><a href="#Parser-4160"><span class="linenos">4160</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Parser-4161"><a href="#Parser-4161"><span class="linenos">4161</span></a>
+</span><span id="Parser-4162"><a href="#Parser-4162"><span class="linenos">4162</span></a> <span class="k">def</span> <span class="nf">_parse_column_def</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4163"><a href="#Parser-4163"><span class="linenos">4163</span></a> <span class="c1"># column defs are not really columns, they&#39;re identifiers</span>
+</span><span id="Parser-4164"><a href="#Parser-4164"><span class="linenos">4164</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
+</span><span id="Parser-4165"><a href="#Parser-4165"><span class="linenos">4165</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Parser-4166"><a href="#Parser-4166"><span class="linenos">4166</span></a>
+</span><span id="Parser-4167"><a href="#Parser-4167"><span class="linenos">4167</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4168"><a href="#Parser-4168"><span class="linenos">4168</span></a>
+</span><span id="Parser-4169"><a href="#Parser-4169"><span class="linenos">4169</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;ORDINALITY&quot;</span><span class="p">):</span>
+</span><span id="Parser-4170"><a href="#Parser-4170"><span class="linenos">4170</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">ordinality</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4171"><a href="#Parser-4171"><span class="linenos">4171</span></a>
+</span><span id="Parser-4172"><a href="#Parser-4172"><span class="linenos">4172</span></a> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4173"><a href="#Parser-4173"><span class="linenos">4173</span></a>
+</span><span id="Parser-4174"><a href="#Parser-4174"><span class="linenos">4174</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
+</span><span id="Parser-4175"><a href="#Parser-4175"><span class="linenos">4175</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-4176"><a href="#Parser-4176"><span class="linenos">4176</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4177"><a href="#Parser-4177"><span class="linenos">4177</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span><span class="p">,</span>
+</span><span id="Parser-4178"><a href="#Parser-4178"><span class="linenos">4178</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="Parser-4179"><a href="#Parser-4179"><span class="linenos">4179</span></a> <span class="n">persisted</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PERSISTED&quot;</span><span class="p">),</span>
+</span><span id="Parser-4180"><a href="#Parser-4180"><span class="linenos">4180</span></a> <span class="n">not_null</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">),</span>
+</span><span id="Parser-4181"><a href="#Parser-4181"><span class="linenos">4181</span></a> <span class="p">)</span>
+</span><span id="Parser-4182"><a href="#Parser-4182"><span class="linenos">4182</span></a> <span class="p">)</span>
+</span><span id="Parser-4183"><a href="#Parser-4183"><span class="linenos">4183</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-4184"><a href="#Parser-4184"><span class="linenos">4184</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
+</span><span id="Parser-4185"><a href="#Parser-4185"><span class="linenos">4185</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-4186"><a href="#Parser-4186"><span class="linenos">4186</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">TransformColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">())</span>
+</span><span id="Parser-4187"><a href="#Parser-4187"><span class="linenos">4187</span></a> <span class="p">)</span>
+</span><span id="Parser-4188"><a href="#Parser-4188"><span class="linenos">4188</span></a>
+</span><span id="Parser-4189"><a href="#Parser-4189"><span class="linenos">4189</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-4190"><a href="#Parser-4190"><span class="linenos">4190</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column_constraint</span><span class="p">()</span>
+</span><span id="Parser-4191"><a href="#Parser-4191"><span class="linenos">4191</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
+</span><span id="Parser-4192"><a href="#Parser-4192"><span class="linenos">4192</span></a> <span class="k">break</span>
+</span><span id="Parser-4193"><a href="#Parser-4193"><span class="linenos">4193</span></a> <span class="n">constraints</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
+</span><span id="Parser-4194"><a href="#Parser-4194"><span class="linenos">4194</span></a>
+</span><span id="Parser-4195"><a href="#Parser-4195"><span class="linenos">4195</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">kind</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">constraints</span><span class="p">:</span>
+</span><span id="Parser-4196"><a href="#Parser-4196"><span class="linenos">4196</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4197"><a href="#Parser-4197"><span class="linenos">4197</span></a>
+</span><span id="Parser-4198"><a href="#Parser-4198"><span class="linenos">4198</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">constraints</span><span class="o">=</span><span class="n">constraints</span><span class="p">)</span>
+</span><span id="Parser-4199"><a href="#Parser-4199"><span class="linenos">4199</span></a>
+</span><span id="Parser-4200"><a href="#Parser-4200"><span class="linenos">4200</span></a> <span class="k">def</span> <span class="nf">_parse_auto_increment</span><span class="p">(</span>
+</span><span id="Parser-4201"><a href="#Parser-4201"><span class="linenos">4201</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-4202"><a href="#Parser-4202"><span class="linenos">4202</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">:</span>
+</span><span id="Parser-4203"><a href="#Parser-4203"><span class="linenos">4203</span></a> <span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4204"><a href="#Parser-4204"><span class="linenos">4204</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4205"><a href="#Parser-4205"><span class="linenos">4205</span></a>
+</span><span id="Parser-4206"><a href="#Parser-4206"><span class="linenos">4206</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-4207"><a href="#Parser-4207"><span class="linenos">4207</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="Parser-4208"><a href="#Parser-4208"><span class="linenos">4208</span></a> <span class="n">start</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Parser-4209"><a href="#Parser-4209"><span class="linenos">4209</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-4210"><a href="#Parser-4210"><span class="linenos">4210</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">):</span>
+</span><span id="Parser-4211"><a href="#Parser-4211"><span class="linenos">4211</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-4212"><a href="#Parser-4212"><span class="linenos">4212</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">)</span>
+</span><span id="Parser-4213"><a href="#Parser-4213"><span class="linenos">4213</span></a> <span class="n">increment</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-4214"><a href="#Parser-4214"><span class="linenos">4214</span></a>
+</span><span id="Parser-4215"><a href="#Parser-4215"><span class="linenos">4215</span></a> <span class="k">if</span> <span class="n">start</span> <span class="ow">and</span> <span class="n">increment</span><span class="p">:</span>
+</span><span id="Parser-4216"><a href="#Parser-4216"><span class="linenos">4216</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">(</span><span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">increment</span><span class="o">=</span><span class="n">increment</span><span class="p">)</span>
+</span><span id="Parser-4217"><a href="#Parser-4217"><span class="linenos">4217</span></a>
+</span><span id="Parser-4218"><a href="#Parser-4218"><span class="linenos">4218</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementColumnConstraint</span><span class="p">()</span>
+</span><span id="Parser-4219"><a href="#Parser-4219"><span class="linenos">4219</span></a>
+</span><span id="Parser-4220"><a href="#Parser-4220"><span class="linenos">4220</span></a> <span class="k">def</span> <span class="nf">_parse_auto_property</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">]:</span>
+</span><span id="Parser-4221"><a href="#Parser-4221"><span class="linenos">4221</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;REFRESH&quot;</span><span class="p">):</span>
+</span><span id="Parser-4222"><a href="#Parser-4222"><span class="linenos">4222</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-4223"><a href="#Parser-4223"><span class="linenos">4223</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4224"><a href="#Parser-4224"><span class="linenos">4224</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AutoRefreshProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">upper</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Parser-4225"><a href="#Parser-4225"><span class="linenos">4225</span></a>
+</span><span id="Parser-4226"><a href="#Parser-4226"><span class="linenos">4226</span></a> <span class="k">def</span> <span class="nf">_parse_compress</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">:</span>
+</span><span id="Parser-4227"><a href="#Parser-4227"><span class="linenos">4227</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-4228"><a href="#Parser-4228"><span class="linenos">4228</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4229"><a href="#Parser-4229"><span class="linenos">4229</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="Parser-4230"><a href="#Parser-4230"><span class="linenos">4230</span></a> <span class="p">)</span>
+</span><span id="Parser-4231"><a href="#Parser-4231"><span class="linenos">4231</span></a>
+</span><span id="Parser-4232"><a href="#Parser-4232"><span class="linenos">4232</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CompressColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="Parser-4233"><a href="#Parser-4233"><span class="linenos">4233</span></a>
+</span><span id="Parser-4234"><a href="#Parser-4234"><span class="linenos">4234</span></a> <span class="k">def</span> <span class="nf">_parse_generated_as_identity</span><span class="p">(</span>
+</span><span id="Parser-4235"><a href="#Parser-4235"><span class="linenos">4235</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-4236"><a href="#Parser-4236"><span class="linenos">4236</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="p">(</span>
+</span><span id="Parser-4237"><a href="#Parser-4237"><span class="linenos">4237</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span>
+</span><span id="Parser-4238"><a href="#Parser-4238"><span class="linenos">4238</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">ComputedColumnConstraint</span>
+</span><span id="Parser-4239"><a href="#Parser-4239"><span class="linenos">4239</span></a> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span>
+</span><span id="Parser-4240"><a href="#Parser-4240"><span class="linenos">4240</span></a> <span class="p">):</span>
+</span><span id="Parser-4241"><a href="#Parser-4241"><span class="linenos">4241</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFAULT&quot;</span><span class="p">):</span>
+</span><span id="Parser-4242"><a href="#Parser-4242"><span class="linenos">4242</span></a> <span class="n">on_null</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">)</span>
+</span><span id="Parser-4243"><a href="#Parser-4243"><span class="linenos">4243</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4244"><a href="#Parser-4244"><span class="linenos">4244</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">on_null</span><span class="o">=</span><span class="n">on_null</span>
+</span><span id="Parser-4245"><a href="#Parser-4245"><span class="linenos">4245</span></a> <span class="p">)</span>
+</span><span id="Parser-4246"><a href="#Parser-4246"><span class="linenos">4246</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4247"><a href="#Parser-4247"><span class="linenos">4247</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ALWAYS&quot;</span><span class="p">)</span>
+</span><span id="Parser-4248"><a href="#Parser-4248"><span class="linenos">4248</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsIdentityColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4249"><a href="#Parser-4249"><span class="linenos">4249</span></a>
+</span><span id="Parser-4250"><a href="#Parser-4250"><span class="linenos">4250</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
+</span><span id="Parser-4251"><a href="#Parser-4251"><span class="linenos">4251</span></a>
+</span><span id="Parser-4252"><a href="#Parser-4252"><span class="linenos">4252</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ROW&quot;</span><span class="p">):</span>
+</span><span id="Parser-4253"><a href="#Parser-4253"><span class="linenos">4253</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;START&quot;</span><span class="p">)</span>
+</span><span id="Parser-4254"><a href="#Parser-4254"><span class="linenos">4254</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">start</span><span class="p">:</span>
+</span><span id="Parser-4255"><a href="#Parser-4255"><span class="linenos">4255</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
+</span><span id="Parser-4256"><a href="#Parser-4256"><span class="linenos">4256</span></a> <span class="n">hidden</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;HIDDEN&quot;</span><span class="p">)</span>
+</span><span id="Parser-4257"><a href="#Parser-4257"><span class="linenos">4257</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GeneratedAsRowColumnConstraint</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">,</span> <span class="n">hidden</span><span class="o">=</span><span class="n">hidden</span><span class="p">)</span>
+</span><span id="Parser-4258"><a href="#Parser-4258"><span class="linenos">4258</span></a>
+</span><span id="Parser-4259"><a href="#Parser-4259"><span class="linenos">4259</span></a> <span class="n">identity</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IDENTITY&quot;</span><span class="p">)</span>
+</span><span id="Parser-4260"><a href="#Parser-4260"><span class="linenos">4260</span></a>
+</span><span id="Parser-4261"><a href="#Parser-4261"><span class="linenos">4261</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-4262"><a href="#Parser-4262"><span class="linenos">4262</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">START_WITH</span><span class="p">):</span>
+</span><span id="Parser-4263"><a href="#Parser-4263"><span class="linenos">4263</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="Parser-4264"><a href="#Parser-4264"><span class="linenos">4264</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INCREMENT&quot;</span><span class="p">,</span> <span class="s2">&quot;BY&quot;</span><span class="p">):</span>
+</span><span id="Parser-4265"><a href="#Parser-4265"><span class="linenos">4265</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="Parser-4266"><a href="#Parser-4266"><span class="linenos">4266</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MINVALUE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4267"><a href="#Parser-4267"><span class="linenos">4267</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;minvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="Parser-4268"><a href="#Parser-4268"><span class="linenos">4268</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAXVALUE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4269"><a href="#Parser-4269"><span class="linenos">4269</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;maxvalue&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="Parser-4270"><a href="#Parser-4270"><span class="linenos">4270</span></a>
+</span><span id="Parser-4271"><a href="#Parser-4271"><span class="linenos">4271</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4272"><a href="#Parser-4272"><span class="linenos">4272</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4273"><a href="#Parser-4273"><span class="linenos">4273</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;CYCLE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4274"><a href="#Parser-4274"><span class="linenos">4274</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;cycle&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-4275"><a href="#Parser-4275"><span class="linenos">4275</span></a>
+</span><span id="Parser-4276"><a href="#Parser-4276"><span class="linenos">4276</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">identity</span><span class="p">:</span>
+</span><span id="Parser-4277"><a href="#Parser-4277"><span class="linenos">4277</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expression&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="Parser-4278"><a href="#Parser-4278"><span class="linenos">4278</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-4279"><a href="#Parser-4279"><span class="linenos">4279</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="Parser-4280"><a href="#Parser-4280"><span class="linenos">4280</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;start&quot;</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="Parser-4281"><a href="#Parser-4281"><span class="linenos">4281</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;increment&quot;</span><span class="p">,</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
+</span><span id="Parser-4282"><a href="#Parser-4282"><span class="linenos">4282</span></a>
+</span><span id="Parser-4283"><a href="#Parser-4283"><span class="linenos">4283</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-4284"><a href="#Parser-4284"><span class="linenos">4284</span></a>
+</span><span id="Parser-4285"><a href="#Parser-4285"><span class="linenos">4285</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4286"><a href="#Parser-4286"><span class="linenos">4286</span></a>
+</span><span id="Parser-4287"><a href="#Parser-4287"><span class="linenos">4287</span></a> <span class="k">def</span> <span class="nf">_parse_inline</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">:</span>
+</span><span id="Parser-4288"><a href="#Parser-4288"><span class="linenos">4288</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LENGTH&quot;</span><span class="p">)</span>
+</span><span id="Parser-4289"><a href="#Parser-4289"><span class="linenos">4289</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">InlineLengthColumnConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="Parser-4290"><a href="#Parser-4290"><span class="linenos">4290</span></a>
+</span><span id="Parser-4291"><a href="#Parser-4291"><span class="linenos">4291</span></a> <span class="k">def</span> <span class="nf">_parse_not_constraint</span><span class="p">(</span>
+</span><span id="Parser-4292"><a href="#Parser-4292"><span class="linenos">4292</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-4293"><a href="#Parser-4293"><span class="linenos">4293</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4294"><a href="#Parser-4294"><span class="linenos">4294</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">):</span>
+</span><span id="Parser-4295"><a href="#Parser-4295"><span class="linenos">4295</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotNullColumnConstraint</span><span class="p">)</span>
+</span><span id="Parser-4296"><a href="#Parser-4296"><span class="linenos">4296</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASESPECIFIC&quot;</span><span class="p">):</span>
+</span><span id="Parser-4297"><a href="#Parser-4297"><span class="linenos">4297</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CaseSpecificColumnConstraint</span><span class="p">,</span> <span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4298"><a href="#Parser-4298"><span class="linenos">4298</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FOR&quot;</span><span class="p">,</span> <span class="s2">&quot;REPLICATION&quot;</span><span class="p">):</span>
+</span><span id="Parser-4299"><a href="#Parser-4299"><span class="linenos">4299</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">NotForReplicationColumnConstraint</span><span class="p">)</span>
+</span><span id="Parser-4300"><a href="#Parser-4300"><span class="linenos">4300</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4301"><a href="#Parser-4301"><span class="linenos">4301</span></a>
-</span><span id="Parser-4302"><a href="#Parser-4302"><span class="linenos">4302</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4303"><a href="#Parser-4303"><span class="linenos">4303</span></a>
-</span><span id="Parser-4304"><a href="#Parser-4304"><span class="linenos">4304</span></a> <span class="k">def</span> <span class="nf">_parse_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4305"><a href="#Parser-4305"><span class="linenos">4305</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">):</span>
-</span><span id="Parser-4306"><a href="#Parser-4306"><span class="linenos">4306</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">(</span><span class="n">constraints</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">)</span>
+</span><span id="Parser-4302"><a href="#Parser-4302"><span class="linenos">4302</span></a> <span class="k">def</span> <span class="nf">_parse_column_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4303"><a href="#Parser-4303"><span class="linenos">4303</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">):</span>
+</span><span id="Parser-4304"><a href="#Parser-4304"><span class="linenos">4304</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-4305"><a href="#Parser-4305"><span class="linenos">4305</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4306"><a href="#Parser-4306"><span class="linenos">4306</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-4307"><a href="#Parser-4307"><span class="linenos">4307</span></a>
-</span><span id="Parser-4308"><a href="#Parser-4308"><span class="linenos">4308</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-4309"><a href="#Parser-4309"><span class="linenos">4309</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4310"><a href="#Parser-4310"><span class="linenos">4310</span></a>
-</span><span id="Parser-4311"><a href="#Parser-4311"><span class="linenos">4311</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-4312"><a href="#Parser-4312"><span class="linenos">4312</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
-</span><span id="Parser-4313"><a href="#Parser-4313"><span class="linenos">4313</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
-</span><span id="Parser-4314"><a href="#Parser-4314"><span class="linenos">4314</span></a> <span class="k">break</span>
-</span><span id="Parser-4315"><a href="#Parser-4315"><span class="linenos">4315</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
+</span><span id="Parser-4308"><a href="#Parser-4308"><span class="linenos">4308</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">):</span>
+</span><span id="Parser-4309"><a href="#Parser-4309"><span class="linenos">4309</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4310"><a href="#Parser-4310"><span class="linenos">4310</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnConstraint</span><span class="p">,</span>
+</span><span id="Parser-4311"><a href="#Parser-4311"><span class="linenos">4311</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4312"><a href="#Parser-4312"><span class="linenos">4312</span></a> <span class="n">kind</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()](</span><span class="bp">self</span><span class="p">),</span>
+</span><span id="Parser-4313"><a href="#Parser-4313"><span class="linenos">4313</span></a> <span class="p">)</span>
+</span><span id="Parser-4314"><a href="#Parser-4314"><span class="linenos">4314</span></a>
+</span><span id="Parser-4315"><a href="#Parser-4315"><span class="linenos">4315</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4316"><a href="#Parser-4316"><span class="linenos">4316</span></a>
-</span><span id="Parser-4317"><a href="#Parser-4317"><span class="linenos">4317</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Constraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-4318"><a href="#Parser-4318"><span class="linenos">4318</span></a>
-</span><span id="Parser-4319"><a href="#Parser-4319"><span class="linenos">4319</span></a> <span class="k">def</span> <span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
-</span><span id="Parser-4320"><a href="#Parser-4320"><span class="linenos">4320</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4321"><a href="#Parser-4321"><span class="linenos">4321</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4322"><a href="#Parser-4322"><span class="linenos">4322</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span>
-</span><span id="Parser-4323"><a href="#Parser-4323"><span class="linenos">4323</span></a> <span class="n">constraints</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span>
-</span><span id="Parser-4324"><a href="#Parser-4324"><span class="linenos">4324</span></a> <span class="p">):</span>
-</span><span id="Parser-4325"><a href="#Parser-4325"><span class="linenos">4325</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4326"><a href="#Parser-4326"><span class="linenos">4326</span></a>
-</span><span id="Parser-4327"><a href="#Parser-4327"><span class="linenos">4327</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-4328"><a href="#Parser-4328"><span class="linenos">4328</span></a> <span class="k">if</span> <span class="n">constraint</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">:</span>
-</span><span id="Parser-4329"><a href="#Parser-4329"><span class="linenos">4329</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser found for schema constraint </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
-</span><span id="Parser-4330"><a href="#Parser-4330"><span class="linenos">4330</span></a>
-</span><span id="Parser-4331"><a href="#Parser-4331"><span class="linenos">4331</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="n">constraint</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Parser-4332"><a href="#Parser-4332"><span class="linenos">4332</span></a>
-</span><span id="Parser-4333"><a href="#Parser-4333"><span class="linenos">4333</span></a> <span class="k">def</span> <span class="nf">_parse_unique</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">:</span>
-</span><span id="Parser-4334"><a href="#Parser-4334"><span class="linenos">4334</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
-</span><span id="Parser-4335"><a href="#Parser-4335"><span class="linenos">4335</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4336"><a href="#Parser-4336"><span class="linenos">4336</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">,</span>
-</span><span id="Parser-4337"><a href="#Parser-4337"><span class="linenos">4337</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)),</span>
-</span><span id="Parser-4338"><a href="#Parser-4338"><span class="linenos">4338</span></a> <span class="n">index_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
-</span><span id="Parser-4339"><a href="#Parser-4339"><span class="linenos">4339</span></a> <span class="p">)</span>
-</span><span id="Parser-4340"><a href="#Parser-4340"><span class="linenos">4340</span></a>
-</span><span id="Parser-4341"><a href="#Parser-4341"><span class="linenos">4341</span></a> <span class="k">def</span> <span class="nf">_parse_key_constraint_options</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Parser-4342"><a href="#Parser-4342"><span class="linenos">4342</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4343"><a href="#Parser-4343"><span class="linenos">4343</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-4344"><a href="#Parser-4344"><span class="linenos">4344</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-4345"><a href="#Parser-4345"><span class="linenos">4345</span></a> <span class="k">break</span>
-</span><span id="Parser-4346"><a href="#Parser-4346"><span class="linenos">4346</span></a>
-</span><span id="Parser-4347"><a href="#Parser-4347"><span class="linenos">4347</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
-</span><span id="Parser-4348"><a href="#Parser-4348"><span class="linenos">4348</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4349"><a href="#Parser-4349"><span class="linenos">4349</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-4350"><a href="#Parser-4350"><span class="linenos">4350</span></a>
-</span><span id="Parser-4351"><a href="#Parser-4351"><span class="linenos">4351</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
-</span><span id="Parser-4352"><a href="#Parser-4352"><span class="linenos">4352</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="Parser-4353"><a href="#Parser-4353"><span class="linenos">4353</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4354"><a href="#Parser-4354"><span class="linenos">4354</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
-</span><span id="Parser-4355"><a href="#Parser-4355"><span class="linenos">4355</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESTRICT&quot;</span><span class="p">):</span>
-</span><span id="Parser-4356"><a href="#Parser-4356"><span class="linenos">4356</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;RESTRICT&quot;</span>
-</span><span id="Parser-4357"><a href="#Parser-4357"><span class="linenos">4357</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">):</span>
-</span><span id="Parser-4358"><a href="#Parser-4358"><span class="linenos">4358</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
-</span><span id="Parser-4359"><a href="#Parser-4359"><span class="linenos">4359</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
-</span><span id="Parser-4360"><a href="#Parser-4360"><span class="linenos">4360</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
-</span><span id="Parser-4361"><a href="#Parser-4361"><span class="linenos">4361</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4362"><a href="#Parser-4362"><span class="linenos">4362</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Invalid key constraint&quot;</span><span class="p">)</span>
+</span><span id="Parser-4317"><a href="#Parser-4317"><span class="linenos">4317</span></a> <span class="k">def</span> <span class="nf">_parse_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4318"><a href="#Parser-4318"><span class="linenos">4318</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">):</span>
+</span><span id="Parser-4319"><a href="#Parser-4319"><span class="linenos">4319</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">(</span><span class="n">constraints</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">SCHEMA_UNNAMED_CONSTRAINTS</span><span class="p">)</span>
+</span><span id="Parser-4320"><a href="#Parser-4320"><span class="linenos">4320</span></a>
+</span><span id="Parser-4321"><a href="#Parser-4321"><span class="linenos">4321</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-4322"><a href="#Parser-4322"><span class="linenos">4322</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4323"><a href="#Parser-4323"><span class="linenos">4323</span></a>
+</span><span id="Parser-4324"><a href="#Parser-4324"><span class="linenos">4324</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-4325"><a href="#Parser-4325"><span class="linenos">4325</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_unnamed_constraint</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span>
+</span><span id="Parser-4326"><a href="#Parser-4326"><span class="linenos">4326</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">constraint</span><span class="p">:</span>
+</span><span id="Parser-4327"><a href="#Parser-4327"><span class="linenos">4327</span></a> <span class="k">break</span>
+</span><span id="Parser-4328"><a href="#Parser-4328"><span class="linenos">4328</span></a> <span class="n">expressions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">constraint</span><span class="p">)</span>
+</span><span id="Parser-4329"><a href="#Parser-4329"><span class="linenos">4329</span></a>
+</span><span id="Parser-4330"><a href="#Parser-4330"><span class="linenos">4330</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Constraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-4331"><a href="#Parser-4331"><span class="linenos">4331</span></a>
+</span><span id="Parser-4332"><a href="#Parser-4332"><span class="linenos">4332</span></a> <span class="k">def</span> <span class="nf">_parse_unnamed_constraint</span><span class="p">(</span>
+</span><span id="Parser-4333"><a href="#Parser-4333"><span class="linenos">4333</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">constraints</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4334"><a href="#Parser-4334"><span class="linenos">4334</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4335"><a href="#Parser-4335"><span class="linenos">4335</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span>
+</span><span id="Parser-4336"><a href="#Parser-4336"><span class="linenos">4336</span></a> <span class="n">constraints</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span>
+</span><span id="Parser-4337"><a href="#Parser-4337"><span class="linenos">4337</span></a> <span class="p">):</span>
+</span><span id="Parser-4338"><a href="#Parser-4338"><span class="linenos">4338</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4339"><a href="#Parser-4339"><span class="linenos">4339</span></a>
+</span><span id="Parser-4340"><a href="#Parser-4340"><span class="linenos">4340</span></a> <span class="n">constraint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-4341"><a href="#Parser-4341"><span class="linenos">4341</span></a> <span class="k">if</span> <span class="n">constraint</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">:</span>
+</span><span id="Parser-4342"><a href="#Parser-4342"><span class="linenos">4342</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No parser found for schema constraint </span><span class="si">{</span><span class="n">constraint</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="Parser-4343"><a href="#Parser-4343"><span class="linenos">4343</span></a>
+</span><span id="Parser-4344"><a href="#Parser-4344"><span class="linenos">4344</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">CONSTRAINT_PARSERS</span><span class="p">[</span><span class="n">constraint</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Parser-4345"><a href="#Parser-4345"><span class="linenos">4345</span></a>
+</span><span id="Parser-4346"><a href="#Parser-4346"><span class="linenos">4346</span></a> <span class="k">def</span> <span class="nf">_parse_unique</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">:</span>
+</span><span id="Parser-4347"><a href="#Parser-4347"><span class="linenos">4347</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
+</span><span id="Parser-4348"><a href="#Parser-4348"><span class="linenos">4348</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4349"><a href="#Parser-4349"><span class="linenos">4349</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UniqueColumnConstraint</span><span class="p">,</span>
+</span><span id="Parser-4350"><a href="#Parser-4350"><span class="linenos">4350</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">)),</span>
+</span><span id="Parser-4351"><a href="#Parser-4351"><span class="linenos">4351</span></a> <span class="n">index_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
+</span><span id="Parser-4352"><a href="#Parser-4352"><span class="linenos">4352</span></a> <span class="p">)</span>
+</span><span id="Parser-4353"><a href="#Parser-4353"><span class="linenos">4353</span></a>
+</span><span id="Parser-4354"><a href="#Parser-4354"><span class="linenos">4354</span></a> <span class="k">def</span> <span class="nf">_parse_key_constraint_options</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Parser-4355"><a href="#Parser-4355"><span class="linenos">4355</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4356"><a href="#Parser-4356"><span class="linenos">4356</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-4357"><a href="#Parser-4357"><span class="linenos">4357</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-4358"><a href="#Parser-4358"><span class="linenos">4358</span></a> <span class="k">break</span>
+</span><span id="Parser-4359"><a href="#Parser-4359"><span class="linenos">4359</span></a>
+</span><span id="Parser-4360"><a href="#Parser-4360"><span class="linenos">4360</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
+</span><span id="Parser-4361"><a href="#Parser-4361"><span class="linenos">4361</span></a> <span class="n">action</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4362"><a href="#Parser-4362"><span class="linenos">4362</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-4363"><a href="#Parser-4363"><span class="linenos">4363</span></a>
-</span><span id="Parser-4364"><a href="#Parser-4364"><span class="linenos">4364</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="Parser-4365"><a href="#Parser-4365"><span class="linenos">4365</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;ENFORCED&quot;</span><span class="p">):</span>
-</span><span id="Parser-4366"><a href="#Parser-4366"><span class="linenos">4366</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NOT ENFORCED&quot;</span><span class="p">)</span>
-</span><span id="Parser-4367"><a href="#Parser-4367"><span class="linenos">4367</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFERRABLE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4368"><a href="#Parser-4368"><span class="linenos">4368</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;DEFERRABLE&quot;</span><span class="p">)</span>
-</span><span id="Parser-4369"><a href="#Parser-4369"><span class="linenos">4369</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INITIALLY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFERRED&quot;</span><span class="p">):</span>
-</span><span id="Parser-4370"><a href="#Parser-4370"><span class="linenos">4370</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;INITIALLY DEFERRED&quot;</span><span class="p">)</span>
-</span><span id="Parser-4371"><a href="#Parser-4371"><span class="linenos">4371</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NORELY&quot;</span><span class="p">):</span>
-</span><span id="Parser-4372"><a href="#Parser-4372"><span class="linenos">4372</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NORELY&quot;</span><span class="p">)</span>
-</span><span id="Parser-4373"><a href="#Parser-4373"><span class="linenos">4373</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;FULL&quot;</span><span class="p">):</span>
-</span><span id="Parser-4374"><a href="#Parser-4374"><span class="linenos">4374</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;MATCH FULL&quot;</span><span class="p">)</span>
-</span><span id="Parser-4375"><a href="#Parser-4375"><span class="linenos">4375</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4376"><a href="#Parser-4376"><span class="linenos">4376</span></a> <span class="k">break</span>
-</span><span id="Parser-4377"><a href="#Parser-4377"><span class="linenos">4377</span></a>
-</span><span id="Parser-4378"><a href="#Parser-4378"><span class="linenos">4378</span></a> <span class="k">return</span> <span class="n">options</span>
-</span><span id="Parser-4379"><a href="#Parser-4379"><span class="linenos">4379</span></a>
-</span><span id="Parser-4380"><a href="#Parser-4380"><span class="linenos">4380</span></a> <span class="k">def</span> <span class="nf">_parse_references</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Reference</span><span class="p">]:</span>
-</span><span id="Parser-4381"><a href="#Parser-4381"><span class="linenos">4381</span></a> <span class="k">if</span> <span class="n">match</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">):</span>
-</span><span id="Parser-4382"><a href="#Parser-4382"><span class="linenos">4382</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4383"><a href="#Parser-4383"><span class="linenos">4383</span></a>
-</span><span id="Parser-4384"><a href="#Parser-4384"><span class="linenos">4384</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4385"><a href="#Parser-4385"><span class="linenos">4385</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4386"><a href="#Parser-4386"><span class="linenos">4386</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
-</span><span id="Parser-4387"><a href="#Parser-4387"><span class="linenos">4387</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Reference</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
-</span><span id="Parser-4388"><a href="#Parser-4388"><span class="linenos">4388</span></a>
-</span><span id="Parser-4389"><a href="#Parser-4389"><span class="linenos">4389</span></a> <span class="k">def</span> <span class="nf">_parse_foreign_key</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">:</span>
-</span><span id="Parser-4390"><a href="#Parser-4390"><span class="linenos">4390</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="Parser-4391"><a href="#Parser-4391"><span class="linenos">4391</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_references</span><span class="p">()</span>
-</span><span id="Parser-4392"><a href="#Parser-4392"><span class="linenos">4392</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
-</span><span id="Parser-4393"><a href="#Parser-4393"><span class="linenos">4393</span></a>
-</span><span id="Parser-4394"><a href="#Parser-4394"><span class="linenos">4394</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
-</span><span id="Parser-4395"><a href="#Parser-4395"><span class="linenos">4395</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">)):</span>
-</span><span id="Parser-4396"><a href="#Parser-4396"><span class="linenos">4396</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected DELETE or UPDATE&quot;</span><span class="p">)</span>
-</span><span id="Parser-4397"><a href="#Parser-4397"><span class="linenos">4397</span></a>
-</span><span id="Parser-4398"><a href="#Parser-4398"><span class="linenos">4398</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="Parser-4399"><a href="#Parser-4399"><span class="linenos">4399</span></a>
-</span><span id="Parser-4400"><a href="#Parser-4400"><span class="linenos">4400</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
-</span><span id="Parser-4401"><a href="#Parser-4401"><span class="linenos">4401</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
-</span><span id="Parser-4402"><a href="#Parser-4402"><span class="linenos">4402</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">):</span>
-</span><span id="Parser-4403"><a href="#Parser-4403"><span class="linenos">4403</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">))</span>
-</span><span id="Parser-4404"><a href="#Parser-4404"><span class="linenos">4404</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-4405"><a href="#Parser-4405"><span class="linenos">4405</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4406"><a href="#Parser-4406"><span class="linenos">4406</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-4407"><a href="#Parser-4407"><span class="linenos">4407</span></a> <span class="n">action</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-4408"><a href="#Parser-4408"><span class="linenos">4408</span></a>
-</span><span id="Parser-4409"><a href="#Parser-4409"><span class="linenos">4409</span></a> <span class="n">options</span><span class="p">[</span><span class="n">kind</span><span class="p">]</span> <span class="o">=</span> <span class="n">action</span>
+</span><span id="Parser-4364"><a href="#Parser-4364"><span class="linenos">4364</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
+</span><span id="Parser-4365"><a href="#Parser-4365"><span class="linenos">4365</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="Parser-4366"><a href="#Parser-4366"><span class="linenos">4366</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CASCADE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4367"><a href="#Parser-4367"><span class="linenos">4367</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;CASCADE&quot;</span>
+</span><span id="Parser-4368"><a href="#Parser-4368"><span class="linenos">4368</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESTRICT&quot;</span><span class="p">):</span>
+</span><span id="Parser-4369"><a href="#Parser-4369"><span class="linenos">4369</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;RESTRICT&quot;</span>
+</span><span id="Parser-4370"><a href="#Parser-4370"><span class="linenos">4370</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">):</span>
+</span><span id="Parser-4371"><a href="#Parser-4371"><span class="linenos">4371</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET NULL&quot;</span>
+</span><span id="Parser-4372"><a href="#Parser-4372"><span class="linenos">4372</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
+</span><span id="Parser-4373"><a href="#Parser-4373"><span class="linenos">4373</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET DEFAULT&quot;</span>
+</span><span id="Parser-4374"><a href="#Parser-4374"><span class="linenos">4374</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4375"><a href="#Parser-4375"><span class="linenos">4375</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Invalid key constraint&quot;</span><span class="p">)</span>
+</span><span id="Parser-4376"><a href="#Parser-4376"><span class="linenos">4376</span></a>
+</span><span id="Parser-4377"><a href="#Parser-4377"><span class="linenos">4377</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="Parser-4378"><a href="#Parser-4378"><span class="linenos">4378</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NOT&quot;</span><span class="p">,</span> <span class="s2">&quot;ENFORCED&quot;</span><span class="p">):</span>
+</span><span id="Parser-4379"><a href="#Parser-4379"><span class="linenos">4379</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NOT ENFORCED&quot;</span><span class="p">)</span>
+</span><span id="Parser-4380"><a href="#Parser-4380"><span class="linenos">4380</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DEFERRABLE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4381"><a href="#Parser-4381"><span class="linenos">4381</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;DEFERRABLE&quot;</span><span class="p">)</span>
+</span><span id="Parser-4382"><a href="#Parser-4382"><span class="linenos">4382</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;INITIALLY&quot;</span><span class="p">,</span> <span class="s2">&quot;DEFERRED&quot;</span><span class="p">):</span>
+</span><span id="Parser-4383"><a href="#Parser-4383"><span class="linenos">4383</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;INITIALLY DEFERRED&quot;</span><span class="p">)</span>
+</span><span id="Parser-4384"><a href="#Parser-4384"><span class="linenos">4384</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NORELY&quot;</span><span class="p">):</span>
+</span><span id="Parser-4385"><a href="#Parser-4385"><span class="linenos">4385</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;NORELY&quot;</span><span class="p">)</span>
+</span><span id="Parser-4386"><a href="#Parser-4386"><span class="linenos">4386</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCH&quot;</span><span class="p">,</span> <span class="s2">&quot;FULL&quot;</span><span class="p">):</span>
+</span><span id="Parser-4387"><a href="#Parser-4387"><span class="linenos">4387</span></a> <span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;MATCH FULL&quot;</span><span class="p">)</span>
+</span><span id="Parser-4388"><a href="#Parser-4388"><span class="linenos">4388</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4389"><a href="#Parser-4389"><span class="linenos">4389</span></a> <span class="k">break</span>
+</span><span id="Parser-4390"><a href="#Parser-4390"><span class="linenos">4390</span></a>
+</span><span id="Parser-4391"><a href="#Parser-4391"><span class="linenos">4391</span></a> <span class="k">return</span> <span class="n">options</span>
+</span><span id="Parser-4392"><a href="#Parser-4392"><span class="linenos">4392</span></a>
+</span><span id="Parser-4393"><a href="#Parser-4393"><span class="linenos">4393</span></a> <span class="k">def</span> <span class="nf">_parse_references</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Reference</span><span class="p">]:</span>
+</span><span id="Parser-4394"><a href="#Parser-4394"><span class="linenos">4394</span></a> <span class="k">if</span> <span class="n">match</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REFERENCES</span><span class="p">):</span>
+</span><span id="Parser-4395"><a href="#Parser-4395"><span class="linenos">4395</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4396"><a href="#Parser-4396"><span class="linenos">4396</span></a>
+</span><span id="Parser-4397"><a href="#Parser-4397"><span class="linenos">4397</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4398"><a href="#Parser-4398"><span class="linenos">4398</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4399"><a href="#Parser-4399"><span class="linenos">4399</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
+</span><span id="Parser-4400"><a href="#Parser-4400"><span class="linenos">4400</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Reference</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
+</span><span id="Parser-4401"><a href="#Parser-4401"><span class="linenos">4401</span></a>
+</span><span id="Parser-4402"><a href="#Parser-4402"><span class="linenos">4402</span></a> <span class="k">def</span> <span class="nf">_parse_foreign_key</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">:</span>
+</span><span id="Parser-4403"><a href="#Parser-4403"><span class="linenos">4403</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="Parser-4404"><a href="#Parser-4404"><span class="linenos">4404</span></a> <span class="n">reference</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_references</span><span class="p">()</span>
+</span><span id="Parser-4405"><a href="#Parser-4405"><span class="linenos">4405</span></a> <span class="n">options</span> <span class="o">=</span> <span class="p">{}</span>
+</span><span id="Parser-4406"><a href="#Parser-4406"><span class="linenos">4406</span></a>
+</span><span id="Parser-4407"><a href="#Parser-4407"><span class="linenos">4407</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">):</span>
+</span><span id="Parser-4408"><a href="#Parser-4408"><span class="linenos">4408</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">)):</span>
+</span><span id="Parser-4409"><a href="#Parser-4409"><span class="linenos">4409</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected DELETE or UPDATE&quot;</span><span class="p">)</span>
</span><span id="Parser-4410"><a href="#Parser-4410"><span class="linenos">4410</span></a>
-</span><span id="Parser-4411"><a href="#Parser-4411"><span class="linenos">4411</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4412"><a href="#Parser-4412"><span class="linenos">4412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">,</span>
-</span><span id="Parser-4413"><a href="#Parser-4413"><span class="linenos">4413</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-4414"><a href="#Parser-4414"><span class="linenos">4414</span></a> <span class="n">reference</span><span class="o">=</span><span class="n">reference</span><span class="p">,</span>
-</span><span id="Parser-4415"><a href="#Parser-4415"><span class="linenos">4415</span></a> <span class="o">**</span><span class="n">options</span><span class="p">,</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-4416"><a href="#Parser-4416"><span class="linenos">4416</span></a> <span class="p">)</span>
-</span><span id="Parser-4417"><a href="#Parser-4417"><span class="linenos">4417</span></a>
-</span><span id="Parser-4418"><a href="#Parser-4418"><span class="linenos">4418</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key_part</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4419"><a href="#Parser-4419"><span class="linenos">4419</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
-</span><span id="Parser-4420"><a href="#Parser-4420"><span class="linenos">4420</span></a>
-</span><span id="Parser-4421"><a href="#Parser-4421"><span class="linenos">4421</span></a> <span class="k">def</span> <span class="nf">_parse_period_for_system_time</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">]:</span>
-</span><span id="Parser-4422"><a href="#Parser-4422"><span class="linenos">4422</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
-</span><span id="Parser-4423"><a href="#Parser-4423"><span class="linenos">4423</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-4424"><a href="#Parser-4424"><span class="linenos">4424</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4425"><a href="#Parser-4425"><span class="linenos">4425</span></a>
-</span><span id="Parser-4426"><a href="#Parser-4426"><span class="linenos">4426</span></a> <span class="n">id_vars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
-</span><span id="Parser-4427"><a href="#Parser-4427"><span class="linenos">4427</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4428"><a href="#Parser-4428"><span class="linenos">4428</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">,</span>
-</span><span id="Parser-4429"><a href="#Parser-4429"><span class="linenos">4429</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
-</span><span id="Parser-4430"><a href="#Parser-4430"><span class="linenos">4430</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
-</span><span id="Parser-4431"><a href="#Parser-4431"><span class="linenos">4431</span></a> <span class="p">)</span>
-</span><span id="Parser-4432"><a href="#Parser-4432"><span class="linenos">4432</span></a>
-</span><span id="Parser-4433"><a href="#Parser-4433"><span class="linenos">4433</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
-</span><span id="Parser-4434"><a href="#Parser-4434"><span class="linenos">4434</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-4435"><a href="#Parser-4435"><span class="linenos">4435</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
-</span><span id="Parser-4436"><a href="#Parser-4436"><span class="linenos">4436</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-4437"><a href="#Parser-4437"><span class="linenos">4437</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">))</span>
-</span><span id="Parser-4438"><a href="#Parser-4438"><span class="linenos">4438</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span>
-</span><span id="Parser-4439"><a href="#Parser-4439"><span class="linenos">4439</span></a> <span class="p">)</span>
-</span><span id="Parser-4440"><a href="#Parser-4440"><span class="linenos">4440</span></a>
-</span><span id="Parser-4441"><a href="#Parser-4441"><span class="linenos">4441</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">in_props</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-4442"><a href="#Parser-4442"><span class="linenos">4442</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">)</span>
-</span><span id="Parser-4443"><a href="#Parser-4443"><span class="linenos">4443</span></a>
-</span><span id="Parser-4444"><a href="#Parser-4444"><span class="linenos">4444</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span>
-</span><span id="Parser-4445"><a href="#Parser-4445"><span class="linenos">4445</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key_part</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">wrapped_optional</span>
-</span><span id="Parser-4446"><a href="#Parser-4446"><span class="linenos">4446</span></a> <span class="p">)</span>
-</span><span id="Parser-4447"><a href="#Parser-4447"><span class="linenos">4447</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
-</span><span id="Parser-4448"><a href="#Parser-4448"><span class="linenos">4448</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
-</span><span id="Parser-4449"><a href="#Parser-4449"><span class="linenos">4449</span></a>
-</span><span id="Parser-4450"><a href="#Parser-4450"><span class="linenos">4450</span></a> <span class="k">def</span> <span class="nf">_parse_bracket_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">is_map</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4451"><a href="#Parser-4451"><span class="linenos">4451</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span> <span class="n">explicit</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Parser-4452"><a href="#Parser-4452"><span class="linenos">4452</span></a>
-</span><span id="Parser-4453"><a href="#Parser-4453"><span class="linenos">4453</span></a> <span class="k">def</span> <span class="nf">_parse_bracket</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4454"><a href="#Parser-4454"><span class="linenos">4454</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)):</span>
-</span><span id="Parser-4455"><a href="#Parser-4455"><span class="linenos">4455</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4411"><a href="#Parser-4411"><span class="linenos">4411</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="Parser-4412"><a href="#Parser-4412"><span class="linenos">4412</span></a>
+</span><span id="Parser-4413"><a href="#Parser-4413"><span class="linenos">4413</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">,</span> <span class="s2">&quot;ACTION&quot;</span><span class="p">):</span>
+</span><span id="Parser-4414"><a href="#Parser-4414"><span class="linenos">4414</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;NO ACTION&quot;</span>
+</span><span id="Parser-4415"><a href="#Parser-4415"><span class="linenos">4415</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">):</span>
+</span><span id="Parser-4416"><a href="#Parser-4416"><span class="linenos">4416</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">))</span>
+</span><span id="Parser-4417"><a href="#Parser-4417"><span class="linenos">4417</span></a> <span class="n">action</span> <span class="o">=</span> <span class="s2">&quot;SET &quot;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-4418"><a href="#Parser-4418"><span class="linenos">4418</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4419"><a href="#Parser-4419"><span class="linenos">4419</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-4420"><a href="#Parser-4420"><span class="linenos">4420</span></a> <span class="n">action</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-4421"><a href="#Parser-4421"><span class="linenos">4421</span></a>
+</span><span id="Parser-4422"><a href="#Parser-4422"><span class="linenos">4422</span></a> <span class="n">options</span><span class="p">[</span><span class="n">kind</span><span class="p">]</span> <span class="o">=</span> <span class="n">action</span>
+</span><span id="Parser-4423"><a href="#Parser-4423"><span class="linenos">4423</span></a>
+</span><span id="Parser-4424"><a href="#Parser-4424"><span class="linenos">4424</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4425"><a href="#Parser-4425"><span class="linenos">4425</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">,</span>
+</span><span id="Parser-4426"><a href="#Parser-4426"><span class="linenos">4426</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-4427"><a href="#Parser-4427"><span class="linenos">4427</span></a> <span class="n">reference</span><span class="o">=</span><span class="n">reference</span><span class="p">,</span>
+</span><span id="Parser-4428"><a href="#Parser-4428"><span class="linenos">4428</span></a> <span class="o">**</span><span class="n">options</span><span class="p">,</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-4429"><a href="#Parser-4429"><span class="linenos">4429</span></a> <span class="p">)</span>
+</span><span id="Parser-4430"><a href="#Parser-4430"><span class="linenos">4430</span></a>
+</span><span id="Parser-4431"><a href="#Parser-4431"><span class="linenos">4431</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key_part</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4432"><a href="#Parser-4432"><span class="linenos">4432</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">()</span>
+</span><span id="Parser-4433"><a href="#Parser-4433"><span class="linenos">4433</span></a>
+</span><span id="Parser-4434"><a href="#Parser-4434"><span class="linenos">4434</span></a> <span class="k">def</span> <span class="nf">_parse_period_for_system_time</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">]:</span>
+</span><span id="Parser-4435"><a href="#Parser-4435"><span class="linenos">4435</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP_SNAPSHOT</span><span class="p">):</span>
+</span><span id="Parser-4436"><a href="#Parser-4436"><span class="linenos">4436</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-4437"><a href="#Parser-4437"><span class="linenos">4437</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4438"><a href="#Parser-4438"><span class="linenos">4438</span></a>
+</span><span id="Parser-4439"><a href="#Parser-4439"><span class="linenos">4439</span></a> <span class="n">id_vars</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_id_vars</span><span class="p">()</span>
+</span><span id="Parser-4440"><a href="#Parser-4440"><span class="linenos">4440</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4441"><a href="#Parser-4441"><span class="linenos">4441</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PeriodForSystemTimeConstraint</span><span class="p">,</span>
+</span><span id="Parser-4442"><a href="#Parser-4442"><span class="linenos">4442</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
+</span><span id="Parser-4443"><a href="#Parser-4443"><span class="linenos">4443</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">id_vars</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
+</span><span id="Parser-4444"><a href="#Parser-4444"><span class="linenos">4444</span></a> <span class="p">)</span>
+</span><span id="Parser-4445"><a href="#Parser-4445"><span class="linenos">4445</span></a>
+</span><span id="Parser-4446"><a href="#Parser-4446"><span class="linenos">4446</span></a> <span class="k">def</span> <span class="nf">_parse_primary_key</span><span class="p">(</span>
+</span><span id="Parser-4447"><a href="#Parser-4447"><span class="linenos">4447</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">wrapped_optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">in_props</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-4448"><a href="#Parser-4448"><span class="linenos">4448</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">:</span>
+</span><span id="Parser-4449"><a href="#Parser-4449"><span class="linenos">4449</span></a> <span class="n">desc</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-4450"><a href="#Parser-4450"><span class="linenos">4450</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ASC</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span><span class="p">))</span>
+</span><span id="Parser-4451"><a href="#Parser-4451"><span class="linenos">4451</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DESC</span>
+</span><span id="Parser-4452"><a href="#Parser-4452"><span class="linenos">4452</span></a> <span class="p">)</span>
+</span><span id="Parser-4453"><a href="#Parser-4453"><span class="linenos">4453</span></a>
+</span><span id="Parser-4454"><a href="#Parser-4454"><span class="linenos">4454</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">in_props</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-4455"><a href="#Parser-4455"><span class="linenos">4455</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKeyColumnConstraint</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">)</span>
</span><span id="Parser-4456"><a href="#Parser-4456"><span class="linenos">4456</span></a>
-</span><span id="Parser-4457"><a href="#Parser-4457"><span class="linenos">4457</span></a> <span class="n">bracket_kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
-</span><span id="Parser-4458"><a href="#Parser-4458"><span class="linenos">4458</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="Parser-4459"><a href="#Parser-4459"><span class="linenos">4459</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket_key_value</span><span class="p">(</span><span class="n">is_map</span><span class="o">=</span><span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)</span>
-</span><span id="Parser-4460"><a href="#Parser-4460"><span class="linenos">4460</span></a> <span class="p">)</span>
-</span><span id="Parser-4461"><a href="#Parser-4461"><span class="linenos">4461</span></a>
-</span><span id="Parser-4462"><a href="#Parser-4462"><span class="linenos">4462</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">:</span>
-</span><span id="Parser-4463"><a href="#Parser-4463"><span class="linenos">4463</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected ]&quot;</span><span class="p">)</span>
-</span><span id="Parser-4464"><a href="#Parser-4464"><span class="linenos">4464</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
-</span><span id="Parser-4465"><a href="#Parser-4465"><span class="linenos">4465</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected }&quot;</span><span class="p">)</span>
-</span><span id="Parser-4466"><a href="#Parser-4466"><span class="linenos">4466</span></a>
-</span><span id="Parser-4467"><a href="#Parser-4467"><span class="linenos">4467</span></a> <span class="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
-</span><span id="Parser-4468"><a href="#Parser-4468"><span class="linenos">4468</span></a> <span class="k">if</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
-</span><span id="Parser-4469"><a href="#Parser-4469"><span class="linenos">4469</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-4470"><a href="#Parser-4470"><span class="linenos">4470</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;ARRAY&quot;</span><span class="p">:</span>
-</span><span id="Parser-4471"><a href="#Parser-4471"><span class="linenos">4471</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-4472"><a href="#Parser-4472"><span class="linenos">4472</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4473"><a href="#Parser-4473"><span class="linenos">4473</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="p">,</span> <span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</span><span class="p">)</span>
-</span><span id="Parser-4474"><a href="#Parser-4474"><span class="linenos">4474</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-4475"><a href="#Parser-4475"><span class="linenos">4475</span></a>
-</span><span id="Parser-4476"><a href="#Parser-4476"><span class="linenos">4476</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4477"><a href="#Parser-4477"><span class="linenos">4477</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4478"><a href="#Parser-4478"><span class="linenos">4478</span></a>
-</span><span id="Parser-4479"><a href="#Parser-4479"><span class="linenos">4479</span></a> <span class="k">def</span> <span class="nf">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4480"><a href="#Parser-4480"><span class="linenos">4480</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">):</span>
-</span><span id="Parser-4481"><a href="#Parser-4481"><span class="linenos">4481</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Slice</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="Parser-4482"><a href="#Parser-4482"><span class="linenos">4482</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4483"><a href="#Parser-4483"><span class="linenos">4483</span></a>
-</span><span id="Parser-4484"><a href="#Parser-4484"><span class="linenos">4484</span></a> <span class="k">def</span> <span class="nf">_parse_case</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4485"><a href="#Parser-4485"><span class="linenos">4485</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4486"><a href="#Parser-4486"><span class="linenos">4486</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4487"><a href="#Parser-4487"><span class="linenos">4487</span></a>
-</span><span id="Parser-4488"><a href="#Parser-4488"><span class="linenos">4488</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="Parser-4489"><a href="#Parser-4489"><span class="linenos">4489</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-4490"><a href="#Parser-4490"><span class="linenos">4490</span></a>
-</span><span id="Parser-4491"><a href="#Parser-4491"><span class="linenos">4491</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">):</span>
-</span><span id="Parser-4492"><a href="#Parser-4492"><span class="linenos">4492</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-4493"><a href="#Parser-4493"><span class="linenos">4493</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
-</span><span id="Parser-4494"><a href="#Parser-4494"><span class="linenos">4494</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-4495"><a href="#Parser-4495"><span class="linenos">4495</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">then</span><span class="p">))</span>
+</span><span id="Parser-4457"><a href="#Parser-4457"><span class="linenos">4457</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span>
+</span><span id="Parser-4458"><a href="#Parser-4458"><span class="linenos">4458</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key_part</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">wrapped_optional</span>
+</span><span id="Parser-4459"><a href="#Parser-4459"><span class="linenos">4459</span></a> <span class="p">)</span>
+</span><span id="Parser-4460"><a href="#Parser-4460"><span class="linenos">4460</span></a> <span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_constraint_options</span><span class="p">()</span>
+</span><span id="Parser-4461"><a href="#Parser-4461"><span class="linenos">4461</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">PrimaryKey</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="n">options</span><span class="p">)</span>
+</span><span id="Parser-4462"><a href="#Parser-4462"><span class="linenos">4462</span></a>
+</span><span id="Parser-4463"><a href="#Parser-4463"><span class="linenos">4463</span></a> <span class="k">def</span> <span class="nf">_parse_bracket_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">is_map</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4464"><a href="#Parser-4464"><span class="linenos">4464</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span> <span class="n">explicit</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
+</span><span id="Parser-4465"><a href="#Parser-4465"><span class="linenos">4465</span></a>
+</span><span id="Parser-4466"><a href="#Parser-4466"><span class="linenos">4466</span></a> <span class="k">def</span> <span class="nf">_parse_bracket</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4467"><a href="#Parser-4467"><span class="linenos">4467</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)):</span>
+</span><span id="Parser-4468"><a href="#Parser-4468"><span class="linenos">4468</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4469"><a href="#Parser-4469"><span class="linenos">4469</span></a>
+</span><span id="Parser-4470"><a href="#Parser-4470"><span class="linenos">4470</span></a> <span class="n">bracket_kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="Parser-4471"><a href="#Parser-4471"><span class="linenos">4471</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="Parser-4472"><a href="#Parser-4472"><span class="linenos">4472</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket_key_value</span><span class="p">(</span><span class="n">is_map</span><span class="o">=</span><span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)</span>
+</span><span id="Parser-4473"><a href="#Parser-4473"><span class="linenos">4473</span></a> <span class="p">)</span>
+</span><span id="Parser-4474"><a href="#Parser-4474"><span class="linenos">4474</span></a>
+</span><span id="Parser-4475"><a href="#Parser-4475"><span class="linenos">4475</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACKET</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACKET</span><span class="p">:</span>
+</span><span id="Parser-4476"><a href="#Parser-4476"><span class="linenos">4476</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected ]&quot;</span><span class="p">)</span>
+</span><span id="Parser-4477"><a href="#Parser-4477"><span class="linenos">4477</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">)</span> <span class="ow">and</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
+</span><span id="Parser-4478"><a href="#Parser-4478"><span class="linenos">4478</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected }&quot;</span><span class="p">)</span>
+</span><span id="Parser-4479"><a href="#Parser-4479"><span class="linenos">4479</span></a>
+</span><span id="Parser-4480"><a href="#Parser-4480"><span class="linenos">4480</span></a> <span class="c1"># https://duckdb.org/docs/sql/data_types/struct.html#creating-structs</span>
+</span><span id="Parser-4481"><a href="#Parser-4481"><span class="linenos">4481</span></a> <span class="k">if</span> <span class="n">bracket_kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">:</span>
+</span><span id="Parser-4482"><a href="#Parser-4482"><span class="linenos">4482</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Struct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-4483"><a href="#Parser-4483"><span class="linenos">4483</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="n">this</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;ARRAY&quot;</span><span class="p">:</span>
+</span><span id="Parser-4484"><a href="#Parser-4484"><span class="linenos">4484</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Array</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-4485"><a href="#Parser-4485"><span class="linenos">4485</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4486"><a href="#Parser-4486"><span class="linenos">4486</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="n">apply_index_offset</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="p">,</span> <span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">INDEX_OFFSET</span><span class="p">)</span>
+</span><span id="Parser-4487"><a href="#Parser-4487"><span class="linenos">4487</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Bracket</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-4488"><a href="#Parser-4488"><span class="linenos">4488</span></a>
+</span><span id="Parser-4489"><a href="#Parser-4489"><span class="linenos">4489</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4490"><a href="#Parser-4490"><span class="linenos">4490</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bracket</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4491"><a href="#Parser-4491"><span class="linenos">4491</span></a>
+</span><span id="Parser-4492"><a href="#Parser-4492"><span class="linenos">4492</span></a> <span class="k">def</span> <span class="nf">_parse_slice</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4493"><a href="#Parser-4493"><span class="linenos">4493</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">):</span>
+</span><span id="Parser-4494"><a href="#Parser-4494"><span class="linenos">4494</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Slice</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="Parser-4495"><a href="#Parser-4495"><span class="linenos">4495</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Parser-4496"><a href="#Parser-4496"><span class="linenos">4496</span></a>
-</span><span id="Parser-4497"><a href="#Parser-4497"><span class="linenos">4497</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">):</span>
-</span><span id="Parser-4498"><a href="#Parser-4498"><span class="linenos">4498</span></a> <span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-4499"><a href="#Parser-4499"><span class="linenos">4499</span></a>
-</span><span id="Parser-4500"><a href="#Parser-4500"><span class="linenos">4500</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">):</span>
-</span><span id="Parser-4501"><a href="#Parser-4501"><span class="linenos">4501</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="ow">and</span> <span class="n">default</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;END&quot;</span><span class="p">:</span>
-</span><span id="Parser-4502"><a href="#Parser-4502"><span class="linenos">4502</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;interval&quot;</span><span class="p">)</span>
-</span><span id="Parser-4503"><a href="#Parser-4503"><span class="linenos">4503</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4504"><a href="#Parser-4504"><span class="linenos">4504</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected END after CASE&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-4505"><a href="#Parser-4505"><span class="linenos">4505</span></a>
-</span><span id="Parser-4506"><a href="#Parser-4506"><span class="linenos">4506</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span>
-</span><span id="Parser-4507"><a href="#Parser-4507"><span class="linenos">4507</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span>
-</span><span id="Parser-4508"><a href="#Parser-4508"><span class="linenos">4508</span></a> <span class="p">)</span>
+</span><span id="Parser-4497"><a href="#Parser-4497"><span class="linenos">4497</span></a> <span class="k">def</span> <span class="nf">_parse_case</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4498"><a href="#Parser-4498"><span class="linenos">4498</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4499"><a href="#Parser-4499"><span class="linenos">4499</span></a> <span class="n">default</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4500"><a href="#Parser-4500"><span class="linenos">4500</span></a>
+</span><span id="Parser-4501"><a href="#Parser-4501"><span class="linenos">4501</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
+</span><span id="Parser-4502"><a href="#Parser-4502"><span class="linenos">4502</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-4503"><a href="#Parser-4503"><span class="linenos">4503</span></a>
+</span><span id="Parser-4504"><a href="#Parser-4504"><span class="linenos">4504</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">):</span>
+</span><span id="Parser-4505"><a href="#Parser-4505"><span class="linenos">4505</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-4506"><a href="#Parser-4506"><span class="linenos">4506</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
+</span><span id="Parser-4507"><a href="#Parser-4507"><span class="linenos">4507</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-4508"><a href="#Parser-4508"><span class="linenos">4508</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">then</span><span class="p">))</span>
</span><span id="Parser-4509"><a href="#Parser-4509"><span class="linenos">4509</span></a>
-</span><span id="Parser-4510"><a href="#Parser-4510"><span class="linenos">4510</span></a> <span class="k">def</span> <span class="nf">_parse_if</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4511"><a href="#Parser-4511"><span class="linenos">4511</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4512"><a href="#Parser-4512"><span class="linenos">4512</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
-</span><span id="Parser-4513"><a href="#Parser-4513"><span class="linenos">4513</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-4514"><a href="#Parser-4514"><span class="linenos">4514</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-4515"><a href="#Parser-4515"><span class="linenos">4515</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4516"><a href="#Parser-4516"><span class="linenos">4516</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="Parser-4517"><a href="#Parser-4517"><span class="linenos">4517</span></a>
-</span><span id="Parser-4518"><a href="#Parser-4518"><span class="linenos">4518</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_IF_COMMANDS</span> <span class="ow">and</span> <span class="n">index</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="Parser-4519"><a href="#Parser-4519"><span class="linenos">4519</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-4520"><a href="#Parser-4520"><span class="linenos">4520</span></a>
-</span><span id="Parser-4521"><a href="#Parser-4521"><span class="linenos">4521</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-4510"><a href="#Parser-4510"><span class="linenos">4510</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">):</span>
+</span><span id="Parser-4511"><a href="#Parser-4511"><span class="linenos">4511</span></a> <span class="n">default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-4512"><a href="#Parser-4512"><span class="linenos">4512</span></a>
+</span><span id="Parser-4513"><a href="#Parser-4513"><span class="linenos">4513</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">):</span>
+</span><span id="Parser-4514"><a href="#Parser-4514"><span class="linenos">4514</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Interval</span><span class="p">)</span> <span class="ow">and</span> <span class="n">default</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">sql</span><span class="p">()</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;END&quot;</span><span class="p">:</span>
+</span><span id="Parser-4515"><a href="#Parser-4515"><span class="linenos">4515</span></a> <span class="n">default</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;interval&quot;</span><span class="p">)</span>
+</span><span id="Parser-4516"><a href="#Parser-4516"><span class="linenos">4516</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4517"><a href="#Parser-4517"><span class="linenos">4517</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected END after CASE&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-4518"><a href="#Parser-4518"><span class="linenos">4518</span></a>
+</span><span id="Parser-4519"><a href="#Parser-4519"><span class="linenos">4519</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span>
+</span><span id="Parser-4520"><a href="#Parser-4520"><span class="linenos">4520</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">default</span><span class="p">)</span>
+</span><span id="Parser-4521"><a href="#Parser-4521"><span class="linenos">4521</span></a> <span class="p">)</span>
</span><span id="Parser-4522"><a href="#Parser-4522"><span class="linenos">4522</span></a>
-</span><span id="Parser-4523"><a href="#Parser-4523"><span class="linenos">4523</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">condition</span><span class="p">:</span>
-</span><span id="Parser-4524"><a href="#Parser-4524"><span class="linenos">4524</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-4525"><a href="#Parser-4525"><span class="linenos">4525</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4526"><a href="#Parser-4526"><span class="linenos">4526</span></a>
-</span><span id="Parser-4527"><a href="#Parser-4527"><span class="linenos">4527</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
-</span><span id="Parser-4528"><a href="#Parser-4528"><span class="linenos">4528</span></a> <span class="n">true</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-4529"><a href="#Parser-4529"><span class="linenos">4529</span></a> <span class="n">false</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-4530"><a href="#Parser-4530"><span class="linenos">4530</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
-</span><span id="Parser-4531"><a href="#Parser-4531"><span class="linenos">4531</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">true</span><span class="p">,</span> <span class="n">false</span><span class="o">=</span><span class="n">false</span><span class="p">)</span>
-</span><span id="Parser-4532"><a href="#Parser-4532"><span class="linenos">4532</span></a>
-</span><span id="Parser-4533"><a href="#Parser-4533"><span class="linenos">4533</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4534"><a href="#Parser-4534"><span class="linenos">4534</span></a>
-</span><span id="Parser-4535"><a href="#Parser-4535"><span class="linenos">4535</span></a> <span class="k">def</span> <span class="nf">_parse_next_value_for</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4536"><a href="#Parser-4536"><span class="linenos">4536</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FOR&quot;</span><span class="p">):</span>
-</span><span id="Parser-4537"><a href="#Parser-4537"><span class="linenos">4537</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-4538"><a href="#Parser-4538"><span class="linenos">4538</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4523"><a href="#Parser-4523"><span class="linenos">4523</span></a> <span class="k">def</span> <span class="nf">_parse_if</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4524"><a href="#Parser-4524"><span class="linenos">4524</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-4525"><a href="#Parser-4525"><span class="linenos">4525</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="Parser-4526"><a href="#Parser-4526"><span class="linenos">4526</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4527"><a href="#Parser-4527"><span class="linenos">4527</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-4528"><a href="#Parser-4528"><span class="linenos">4528</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4529"><a href="#Parser-4529"><span class="linenos">4529</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="Parser-4530"><a href="#Parser-4530"><span class="linenos">4530</span></a>
+</span><span id="Parser-4531"><a href="#Parser-4531"><span class="linenos">4531</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">NO_PAREN_IF_COMMANDS</span> <span class="ow">and</span> <span class="n">index</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="Parser-4532"><a href="#Parser-4532"><span class="linenos">4532</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-4533"><a href="#Parser-4533"><span class="linenos">4533</span></a>
+</span><span id="Parser-4534"><a href="#Parser-4534"><span class="linenos">4534</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-4535"><a href="#Parser-4535"><span class="linenos">4535</span></a>
+</span><span id="Parser-4536"><a href="#Parser-4536"><span class="linenos">4536</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">condition</span><span class="p">:</span>
+</span><span id="Parser-4537"><a href="#Parser-4537"><span class="linenos">4537</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-4538"><a href="#Parser-4538"><span class="linenos">4538</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-4539"><a href="#Parser-4539"><span class="linenos">4539</span></a>
-</span><span id="Parser-4540"><a href="#Parser-4540"><span class="linenos">4540</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4541"><a href="#Parser-4541"><span class="linenos">4541</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</span><span class="p">,</span>
-</span><span id="Parser-4542"><a href="#Parser-4542"><span class="linenos">4542</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
-</span><span id="Parser-4543"><a href="#Parser-4543"><span class="linenos">4543</span></a> <span class="n">order</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OVER</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">),</span>
-</span><span id="Parser-4544"><a href="#Parser-4544"><span class="linenos">4544</span></a> <span class="p">)</span>
+</span><span id="Parser-4540"><a href="#Parser-4540"><span class="linenos">4540</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
+</span><span id="Parser-4541"><a href="#Parser-4541"><span class="linenos">4541</span></a> <span class="n">true</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-4542"><a href="#Parser-4542"><span class="linenos">4542</span></a> <span class="n">false</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ELSE</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-4543"><a href="#Parser-4543"><span class="linenos">4543</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">END</span><span class="p">)</span>
+</span><span id="Parser-4544"><a href="#Parser-4544"><span class="linenos">4544</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">true</span><span class="p">,</span> <span class="n">false</span><span class="o">=</span><span class="n">false</span><span class="p">)</span>
</span><span id="Parser-4545"><a href="#Parser-4545"><span class="linenos">4545</span></a>
-</span><span id="Parser-4546"><a href="#Parser-4546"><span class="linenos">4546</span></a> <span class="k">def</span> <span class="nf">_parse_extract</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span>
-</span><span id="Parser-4547"><a href="#Parser-4547"><span class="linenos">4547</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
-</span><span id="Parser-4548"><a href="#Parser-4548"><span class="linenos">4548</span></a>
-</span><span id="Parser-4549"><a href="#Parser-4549"><span class="linenos">4549</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
-</span><span id="Parser-4550"><a href="#Parser-4550"><span class="linenos">4550</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4551"><a href="#Parser-4551"><span class="linenos">4551</span></a>
-</span><span id="Parser-4552"><a href="#Parser-4552"><span class="linenos">4552</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="Parser-4553"><a href="#Parser-4553"><span class="linenos">4553</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected FROM or comma after EXTRACT&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-4554"><a href="#Parser-4554"><span class="linenos">4554</span></a>
-</span><span id="Parser-4555"><a href="#Parser-4555"><span class="linenos">4555</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4556"><a href="#Parser-4556"><span class="linenos">4556</span></a>
-</span><span id="Parser-4557"><a href="#Parser-4557"><span class="linenos">4557</span></a> <span class="k">def</span> <span class="nf">_parse_any_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span>
-</span><span id="Parser-4558"><a href="#Parser-4558"><span class="linenos">4558</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
-</span><span id="Parser-4559"><a href="#Parser-4559"><span class="linenos">4559</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4560"><a href="#Parser-4560"><span class="linenos">4560</span></a> <span class="n">having</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4546"><a href="#Parser-4546"><span class="linenos">4546</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4547"><a href="#Parser-4547"><span class="linenos">4547</span></a>
+</span><span id="Parser-4548"><a href="#Parser-4548"><span class="linenos">4548</span></a> <span class="k">def</span> <span class="nf">_parse_next_value_for</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4549"><a href="#Parser-4549"><span class="linenos">4549</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">,</span> <span class="s2">&quot;FOR&quot;</span><span class="p">):</span>
+</span><span id="Parser-4550"><a href="#Parser-4550"><span class="linenos">4550</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-4551"><a href="#Parser-4551"><span class="linenos">4551</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4552"><a href="#Parser-4552"><span class="linenos">4552</span></a>
+</span><span id="Parser-4553"><a href="#Parser-4553"><span class="linenos">4553</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4554"><a href="#Parser-4554"><span class="linenos">4554</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">NextValueFor</span><span class="p">,</span>
+</span><span id="Parser-4555"><a href="#Parser-4555"><span class="linenos">4555</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span>
+</span><span id="Parser-4556"><a href="#Parser-4556"><span class="linenos">4556</span></a> <span class="n">order</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">OVER</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">),</span>
+</span><span id="Parser-4557"><a href="#Parser-4557"><span class="linenos">4557</span></a> <span class="p">)</span>
+</span><span id="Parser-4558"><a href="#Parser-4558"><span class="linenos">4558</span></a>
+</span><span id="Parser-4559"><a href="#Parser-4559"><span class="linenos">4559</span></a> <span class="k">def</span> <span class="nf">_parse_extract</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">:</span>
+</span><span id="Parser-4560"><a href="#Parser-4560"><span class="linenos">4560</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_function</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
</span><span id="Parser-4561"><a href="#Parser-4561"><span class="linenos">4561</span></a>
-</span><span id="Parser-4562"><a href="#Parser-4562"><span class="linenos">4562</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">):</span>
-</span><span id="Parser-4563"><a href="#Parser-4563"><span class="linenos">4563</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MIN&quot;</span><span class="p">))</span>
-</span><span id="Parser-4564"><a href="#Parser-4564"><span class="linenos">4564</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span> <span class="o">==</span> <span class="s2">&quot;MAX&quot;</span>
-</span><span id="Parser-4565"><a href="#Parser-4565"><span class="linenos">4565</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-4566"><a href="#Parser-4566"><span class="linenos">4566</span></a>
-</span><span id="Parser-4567"><a href="#Parser-4567"><span class="linenos">4567</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">having</span><span class="o">=</span><span class="n">having</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="n">is_max</span><span class="p">)</span>
-</span><span id="Parser-4568"><a href="#Parser-4568"><span class="linenos">4568</span></a>
-</span><span id="Parser-4569"><a href="#Parser-4569"><span class="linenos">4569</span></a> <span class="k">def</span> <span class="nf">_parse_cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="Parser-4570"><a href="#Parser-4570"><span class="linenos">4570</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-4571"><a href="#Parser-4571"><span class="linenos">4571</span></a>
-</span><span id="Parser-4572"><a href="#Parser-4572"><span class="linenos">4572</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
-</span><span id="Parser-4573"><a href="#Parser-4573"><span class="linenos">4573</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="Parser-4574"><a href="#Parser-4574"><span class="linenos">4574</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="Parser-4575"><a href="#Parser-4575"><span class="linenos">4575</span></a>
-</span><span id="Parser-4576"><a href="#Parser-4576"><span class="linenos">4576</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected AS after CAST&quot;</span><span class="p">)</span>
-</span><span id="Parser-4577"><a href="#Parser-4577"><span class="linenos">4577</span></a>
-</span><span id="Parser-4578"><a href="#Parser-4578"><span class="linenos">4578</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4579"><a href="#Parser-4579"><span class="linenos">4579</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
-</span><span id="Parser-4580"><a href="#Parser-4580"><span class="linenos">4580</span></a>
-</span><span id="Parser-4581"><a href="#Parser-4581"><span class="linenos">4581</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">):</span>
-</span><span id="Parser-4582"><a href="#Parser-4582"><span class="linenos">4582</span></a> <span class="n">fmt_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-4583"><a href="#Parser-4583"><span class="linenos">4583</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="n">fmt_string</span><span class="p">)</span>
+</span><span id="Parser-4562"><a href="#Parser-4562"><span class="linenos">4562</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
+</span><span id="Parser-4563"><a href="#Parser-4563"><span class="linenos">4563</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="Parser-4564"><a href="#Parser-4564"><span class="linenos">4564</span></a>
+</span><span id="Parser-4565"><a href="#Parser-4565"><span class="linenos">4565</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="Parser-4566"><a href="#Parser-4566"><span class="linenos">4566</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected FROM or comma after EXTRACT&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-4567"><a href="#Parser-4567"><span class="linenos">4567</span></a>
+</span><span id="Parser-4568"><a href="#Parser-4568"><span class="linenos">4568</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Extract</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="Parser-4569"><a href="#Parser-4569"><span class="linenos">4569</span></a>
+</span><span id="Parser-4570"><a href="#Parser-4570"><span class="linenos">4570</span></a> <span class="k">def</span> <span class="nf">_parse_any_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">:</span>
+</span><span id="Parser-4571"><a href="#Parser-4571"><span class="linenos">4571</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_lambda</span><span class="p">()</span>
+</span><span id="Parser-4572"><a href="#Parser-4572"><span class="linenos">4572</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4573"><a href="#Parser-4573"><span class="linenos">4573</span></a> <span class="n">having</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4574"><a href="#Parser-4574"><span class="linenos">4574</span></a>
+</span><span id="Parser-4575"><a href="#Parser-4575"><span class="linenos">4575</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HAVING</span><span class="p">):</span>
+</span><span id="Parser-4576"><a href="#Parser-4576"><span class="linenos">4576</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;MAX&quot;</span><span class="p">,</span> <span class="s2">&quot;MIN&quot;</span><span class="p">))</span>
+</span><span id="Parser-4577"><a href="#Parser-4577"><span class="linenos">4577</span></a> <span class="n">is_max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span> <span class="o">==</span> <span class="s2">&quot;MAX&quot;</span>
+</span><span id="Parser-4578"><a href="#Parser-4578"><span class="linenos">4578</span></a> <span class="n">having</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-4579"><a href="#Parser-4579"><span class="linenos">4579</span></a>
+</span><span id="Parser-4580"><a href="#Parser-4580"><span class="linenos">4580</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AnyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">having</span><span class="o">=</span><span class="n">having</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="n">is_max</span><span class="p">)</span>
+</span><span id="Parser-4581"><a href="#Parser-4581"><span class="linenos">4581</span></a>
+</span><span id="Parser-4582"><a href="#Parser-4582"><span class="linenos">4582</span></a> <span class="k">def</span> <span class="nf">_parse_cast</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="Parser-4583"><a href="#Parser-4583"><span class="linenos">4583</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
</span><span id="Parser-4584"><a href="#Parser-4584"><span class="linenos">4584</span></a>
-</span><span id="Parser-4585"><a href="#Parser-4585"><span class="linenos">4585</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="Parser-4586"><a href="#Parser-4586"><span class="linenos">4586</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
-</span><span id="Parser-4587"><a href="#Parser-4587"><span class="linenos">4587</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
-</span><span id="Parser-4588"><a href="#Parser-4588"><span class="linenos">4588</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4589"><a href="#Parser-4589"><span class="linenos">4589</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span>
-</span><span id="Parser-4590"><a href="#Parser-4590"><span class="linenos">4590</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4591"><a href="#Parser-4591"><span class="linenos">4591</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span>
-</span><span id="Parser-4592"><a href="#Parser-4592"><span class="linenos">4592</span></a> <span class="n">format_time</span><span class="p">(</span>
-</span><span id="Parser-4593"><a href="#Parser-4593"><span class="linenos">4593</span></a> <span class="n">fmt_string</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">fmt_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="Parser-4594"><a href="#Parser-4594"><span class="linenos">4594</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
-</span><span id="Parser-4595"><a href="#Parser-4595"><span class="linenos">4595</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">,</span>
-</span><span id="Parser-4596"><a href="#Parser-4596"><span class="linenos">4596</span></a> <span class="p">)</span>
-</span><span id="Parser-4597"><a href="#Parser-4597"><span class="linenos">4597</span></a> <span class="p">),</span>
-</span><span id="Parser-4598"><a href="#Parser-4598"><span class="linenos">4598</span></a> <span class="p">)</span>
-</span><span id="Parser-4599"><a href="#Parser-4599"><span class="linenos">4599</span></a>
-</span><span id="Parser-4600"><a href="#Parser-4600"><span class="linenos">4600</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fmt</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">):</span>
-</span><span id="Parser-4601"><a href="#Parser-4601"><span class="linenos">4601</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;zone&quot;</span><span class="p">])</span>
-</span><span id="Parser-4602"><a href="#Parser-4602"><span class="linenos">4602</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4603"><a href="#Parser-4603"><span class="linenos">4603</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
-</span><span id="Parser-4604"><a href="#Parser-4604"><span class="linenos">4604</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected TYPE after CAST&quot;</span><span class="p">)</span>
-</span><span id="Parser-4605"><a href="#Parser-4605"><span class="linenos">4605</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
-</span><span id="Parser-4606"><a href="#Parser-4606"><span class="linenos">4606</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4607"><a href="#Parser-4607"><span class="linenos">4607</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span>
-</span><span id="Parser-4608"><a href="#Parser-4608"><span class="linenos">4608</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CHARACTER_SET</span><span class="p">):</span>
-</span><span id="Parser-4609"><a href="#Parser-4609"><span class="linenos">4609</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">())</span>
-</span><span id="Parser-4610"><a href="#Parser-4610"><span class="linenos">4610</span></a>
-</span><span id="Parser-4611"><a href="#Parser-4611"><span class="linenos">4611</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4612"><a href="#Parser-4612"><span class="linenos">4612</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span>
-</span><span id="Parser-4613"><a href="#Parser-4613"><span class="linenos">4613</span></a> <span class="p">)</span>
-</span><span id="Parser-4614"><a href="#Parser-4614"><span class="linenos">4614</span></a>
-</span><span id="Parser-4615"><a href="#Parser-4615"><span class="linenos">4615</span></a> <span class="k">def</span> <span class="nf">_parse_string_agg</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="Parser-4616"><a href="#Parser-4616"><span class="linenos">4616</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
-</span><span id="Parser-4617"><a href="#Parser-4617"><span class="linenos">4617</span></a> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Parser-4618"><a href="#Parser-4618"><span class="linenos">4618</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()])</span>
-</span><span id="Parser-4619"><a href="#Parser-4619"><span class="linenos">4619</span></a> <span class="p">]</span>
-</span><span id="Parser-4620"><a href="#Parser-4620"><span class="linenos">4620</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="Parser-4621"><a href="#Parser-4621"><span class="linenos">4621</span></a> <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">))</span>
-</span><span id="Parser-4622"><a href="#Parser-4622"><span class="linenos">4622</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4623"><a href="#Parser-4623"><span class="linenos">4623</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-4624"><a href="#Parser-4624"><span class="linenos">4624</span></a>
-</span><span id="Parser-4625"><a href="#Parser-4625"><span class="linenos">4625</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-4626"><a href="#Parser-4626"><span class="linenos">4626</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span> <span class="ow">and</span> <span class="n">args</span><span class="p">:</span>
-</span><span id="Parser-4627"><a href="#Parser-4627"><span class="linenos">4627</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
-</span><span id="Parser-4628"><a href="#Parser-4628"><span class="linenos">4628</span></a> <span class="c1"># bigquery: STRING_AGG([DISTINCT] expression [, separator] [ORDER BY key [{ASC | DESC}] [, ... ]] [LIMIT n])</span>
-</span><span id="Parser-4629"><a href="#Parser-4629"><span class="linenos">4629</span></a> <span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
-</span><span id="Parser-4630"><a href="#Parser-4630"><span class="linenos">4630</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">separator</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-</span><span id="Parser-4631"><a href="#Parser-4631"><span class="linenos">4631</span></a>
-</span><span id="Parser-4632"><a href="#Parser-4632"><span class="linenos">4632</span></a> <span class="c1"># Checks if we can parse an order clause: WITHIN GROUP (ORDER BY &lt;order_by_expression_list&gt; [ASC | DESC]).</span>
-</span><span id="Parser-4633"><a href="#Parser-4633"><span class="linenos">4633</span></a> <span class="c1"># This is done &quot;manually&quot;, instead of letting _parse_window parse it into an exp.WithinGroup node, so that</span>
-</span><span id="Parser-4634"><a href="#Parser-4634"><span class="linenos">4634</span></a> <span class="c1"># the STRING_AGG call is parsed like in MySQL / SQLite and can thus be transpiled more easily to them.</span>
-</span><span id="Parser-4635"><a href="#Parser-4635"><span class="linenos">4635</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
-</span><span id="Parser-4636"><a href="#Parser-4636"><span class="linenos">4636</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-4637"><a href="#Parser-4637"><span class="linenos">4637</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-4638"><a href="#Parser-4638"><span class="linenos">4638</span></a>
-</span><span id="Parser-4639"><a href="#Parser-4639"><span class="linenos">4639</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span> <span class="c1"># The corresponding match_r_paren will be called in parse_function (caller)</span>
-</span><span id="Parser-4640"><a href="#Parser-4640"><span class="linenos">4640</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
-</span><span id="Parser-4641"><a href="#Parser-4641"><span class="linenos">4641</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">order</span><span class="p">,</span> <span class="n">separator</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-</span><span id="Parser-4642"><a href="#Parser-4642"><span class="linenos">4642</span></a>
-</span><span id="Parser-4643"><a href="#Parser-4643"><span class="linenos">4643</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span>
-</span><span id="Parser-4644"><a href="#Parser-4644"><span class="linenos">4644</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4645"><a href="#Parser-4645"><span class="linenos">4645</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4646"><a href="#Parser-4646"><span class="linenos">4646</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-4647"><a href="#Parser-4647"><span class="linenos">4647</span></a>
-</span><span id="Parser-4648"><a href="#Parser-4648"><span class="linenos">4648</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
-</span><span id="Parser-4649"><a href="#Parser-4649"><span class="linenos">4649</span></a> <span class="n">to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4650"><a href="#Parser-4650"><span class="linenos">4650</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
-</span><span id="Parser-4651"><a href="#Parser-4651"><span class="linenos">4651</span></a> <span class="p">)</span>
-</span><span id="Parser-4652"><a href="#Parser-4652"><span class="linenos">4652</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="Parser-4653"><a href="#Parser-4653"><span class="linenos">4653</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
-</span><span id="Parser-4654"><a href="#Parser-4654"><span class="linenos">4654</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4655"><a href="#Parser-4655"><span class="linenos">4655</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4656"><a href="#Parser-4656"><span class="linenos">4656</span></a>
-</span><span id="Parser-4657"><a href="#Parser-4657"><span class="linenos">4657</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">)</span>
-</span><span id="Parser-4658"><a href="#Parser-4658"><span class="linenos">4658</span></a>
-</span><span id="Parser-4659"><a href="#Parser-4659"><span class="linenos">4659</span></a> <span class="k">def</span> <span class="nf">_parse_decode</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Decode</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">]:</span>
-</span><span id="Parser-4660"><a href="#Parser-4660"><span class="linenos">4660</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Parser-4661"><a href="#Parser-4661"><span class="linenos">4661</span></a><span class="sd"> There are generally two variants of the DECODE function:</span>
-</span><span id="Parser-4662"><a href="#Parser-4662"><span class="linenos">4662</span></a>
-</span><span id="Parser-4663"><a href="#Parser-4663"><span class="linenos">4663</span></a><span class="sd"> - DECODE(bin, charset)</span>
-</span><span id="Parser-4664"><a href="#Parser-4664"><span class="linenos">4664</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</span>
-</span><span id="Parser-4665"><a href="#Parser-4665"><span class="linenos">4665</span></a>
-</span><span id="Parser-4666"><a href="#Parser-4666"><span class="linenos">4666</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
-</span><span id="Parser-4667"><a href="#Parser-4667"><span class="linenos">4667</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
-</span><span id="Parser-4668"><a href="#Parser-4668"><span class="linenos">4668</span></a><span class="sd"> instead of relying on pattern matching.</span>
-</span><span id="Parser-4669"><a href="#Parser-4669"><span class="linenos">4669</span></a><span class="sd"> &quot;&quot;&quot;</span>
-</span><span id="Parser-4670"><a href="#Parser-4670"><span class="linenos">4670</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="Parser-4585"><a href="#Parser-4585"><span class="linenos">4585</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">):</span>
+</span><span id="Parser-4586"><a href="#Parser-4586"><span class="linenos">4586</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="Parser-4587"><a href="#Parser-4587"><span class="linenos">4587</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CastToStrType</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="Parser-4588"><a href="#Parser-4588"><span class="linenos">4588</span></a>
+</span><span id="Parser-4589"><a href="#Parser-4589"><span class="linenos">4589</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected AS after CAST&quot;</span><span class="p">)</span>
+</span><span id="Parser-4590"><a href="#Parser-4590"><span class="linenos">4590</span></a>
+</span><span id="Parser-4591"><a href="#Parser-4591"><span class="linenos">4591</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4592"><a href="#Parser-4592"><span class="linenos">4592</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="Parser-4593"><a href="#Parser-4593"><span class="linenos">4593</span></a>
+</span><span id="Parser-4594"><a href="#Parser-4594"><span class="linenos">4594</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FORMAT</span><span class="p">):</span>
+</span><span id="Parser-4595"><a href="#Parser-4595"><span class="linenos">4595</span></a> <span class="n">fmt_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-4596"><a href="#Parser-4596"><span class="linenos">4596</span></a> <span class="n">fmt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_at_time_zone</span><span class="p">(</span><span class="n">fmt_string</span><span class="p">)</span>
+</span><span id="Parser-4597"><a href="#Parser-4597"><span class="linenos">4597</span></a>
+</span><span id="Parser-4598"><a href="#Parser-4598"><span class="linenos">4598</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="Parser-4599"><a href="#Parser-4599"><span class="linenos">4599</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">UNKNOWN</span><span class="p">)</span>
+</span><span id="Parser-4600"><a href="#Parser-4600"><span class="linenos">4600</span></a> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="ow">in</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">TEMPORAL_TYPES</span><span class="p">:</span>
+</span><span id="Parser-4601"><a href="#Parser-4601"><span class="linenos">4601</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4602"><a href="#Parser-4602"><span class="linenos">4602</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span> <span class="k">if</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">,</span>
+</span><span id="Parser-4603"><a href="#Parser-4603"><span class="linenos">4603</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4604"><a href="#Parser-4604"><span class="linenos">4604</span></a> <span class="nb">format</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span>
+</span><span id="Parser-4605"><a href="#Parser-4605"><span class="linenos">4605</span></a> <span class="n">format_time</span><span class="p">(</span>
+</span><span id="Parser-4606"><a href="#Parser-4606"><span class="linenos">4606</span></a> <span class="n">fmt_string</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">fmt_string</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="Parser-4607"><a href="#Parser-4607"><span class="linenos">4607</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_MAPPING</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_MAPPING</span><span class="p">,</span>
+</span><span id="Parser-4608"><a href="#Parser-4608"><span class="linenos">4608</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">FORMAT_TRIE</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">dialect</span><span class="o">.</span><span class="n">TIME_TRIE</span><span class="p">,</span>
+</span><span id="Parser-4609"><a href="#Parser-4609"><span class="linenos">4609</span></a> <span class="p">)</span>
+</span><span id="Parser-4610"><a href="#Parser-4610"><span class="linenos">4610</span></a> <span class="p">),</span>
+</span><span id="Parser-4611"><a href="#Parser-4611"><span class="linenos">4611</span></a> <span class="p">)</span>
+</span><span id="Parser-4612"><a href="#Parser-4612"><span class="linenos">4612</span></a>
+</span><span id="Parser-4613"><a href="#Parser-4613"><span class="linenos">4613</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">fmt</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">):</span>
+</span><span id="Parser-4614"><a href="#Parser-4614"><span class="linenos">4614</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;zone&quot;</span><span class="p">,</span> <span class="n">fmt</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;zone&quot;</span><span class="p">])</span>
+</span><span id="Parser-4615"><a href="#Parser-4615"><span class="linenos">4615</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4616"><a href="#Parser-4616"><span class="linenos">4616</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">to</span><span class="p">:</span>
+</span><span id="Parser-4617"><a href="#Parser-4617"><span class="linenos">4617</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expected TYPE after CAST&quot;</span><span class="p">)</span>
+</span><span id="Parser-4618"><a href="#Parser-4618"><span class="linenos">4618</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">):</span>
+</span><span id="Parser-4619"><a href="#Parser-4619"><span class="linenos">4619</span></a> <span class="n">to</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">to</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">udt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4620"><a href="#Parser-4620"><span class="linenos">4620</span></a> <span class="k">elif</span> <span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">CHAR</span><span class="p">:</span>
+</span><span id="Parser-4621"><a href="#Parser-4621"><span class="linenos">4621</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">CHARACTER_SET</span><span class="p">):</span>
+</span><span id="Parser-4622"><a href="#Parser-4622"><span class="linenos">4622</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_or_string</span><span class="p">())</span>
+</span><span id="Parser-4623"><a href="#Parser-4623"><span class="linenos">4623</span></a>
+</span><span id="Parser-4624"><a href="#Parser-4624"><span class="linenos">4624</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4625"><a href="#Parser-4625"><span class="linenos">4625</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span> <span class="nb">format</span><span class="o">=</span><span class="n">fmt</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span>
+</span><span id="Parser-4626"><a href="#Parser-4626"><span class="linenos">4626</span></a> <span class="p">)</span>
+</span><span id="Parser-4627"><a href="#Parser-4627"><span class="linenos">4627</span></a>
+</span><span id="Parser-4628"><a href="#Parser-4628"><span class="linenos">4628</span></a> <span class="k">def</span> <span class="nf">_parse_string_agg</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="Parser-4629"><a href="#Parser-4629"><span class="linenos">4629</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DISTINCT</span><span class="p">):</span>
+</span><span id="Parser-4630"><a href="#Parser-4630"><span class="linenos">4630</span></a> <span class="n">args</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Parser-4631"><a href="#Parser-4631"><span class="linenos">4631</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Distinct</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()])</span>
+</span><span id="Parser-4632"><a href="#Parser-4632"><span class="linenos">4632</span></a> <span class="p">]</span>
+</span><span id="Parser-4633"><a href="#Parser-4633"><span class="linenos">4633</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="Parser-4634"><a href="#Parser-4634"><span class="linenos">4634</span></a> <span class="n">args</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">))</span>
+</span><span id="Parser-4635"><a href="#Parser-4635"><span class="linenos">4635</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4636"><a href="#Parser-4636"><span class="linenos">4636</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-4637"><a href="#Parser-4637"><span class="linenos">4637</span></a>
+</span><span id="Parser-4638"><a href="#Parser-4638"><span class="linenos">4638</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-4639"><a href="#Parser-4639"><span class="linenos">4639</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span> <span class="ow">and</span> <span class="n">args</span><span class="p">:</span>
+</span><span id="Parser-4640"><a href="#Parser-4640"><span class="linenos">4640</span></a> <span class="c1"># postgres: STRING_AGG([DISTINCT] expression, separator [ORDER BY expression1 {ASC | DESC} [, ...]])</span>
+</span><span id="Parser-4641"><a href="#Parser-4641"><span class="linenos">4641</span></a> <span class="c1"># bigquery: STRING_AGG([DISTINCT] expression [, separator] [ORDER BY key [{ASC | DESC}] [, ... ]] [LIMIT n])</span>
+</span><span id="Parser-4642"><a href="#Parser-4642"><span class="linenos">4642</span></a> <span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_limit</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]))</span>
+</span><span id="Parser-4643"><a href="#Parser-4643"><span class="linenos">4643</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">separator</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
+</span><span id="Parser-4644"><a href="#Parser-4644"><span class="linenos">4644</span></a>
+</span><span id="Parser-4645"><a href="#Parser-4645"><span class="linenos">4645</span></a> <span class="c1"># Checks if we can parse an order clause: WITHIN GROUP (ORDER BY &lt;order_by_expression_list&gt; [ASC | DESC]).</span>
+</span><span id="Parser-4646"><a href="#Parser-4646"><span class="linenos">4646</span></a> <span class="c1"># This is done &quot;manually&quot;, instead of letting _parse_window parse it into an exp.WithinGroup node, so that</span>
+</span><span id="Parser-4647"><a href="#Parser-4647"><span class="linenos">4647</span></a> <span class="c1"># the STRING_AGG call is parsed like in MySQL / SQLite and can thus be transpiled more easily to them.</span>
+</span><span id="Parser-4648"><a href="#Parser-4648"><span class="linenos">4648</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
+</span><span id="Parser-4649"><a href="#Parser-4649"><span class="linenos">4649</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-4650"><a href="#Parser-4650"><span class="linenos">4650</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4651"><a href="#Parser-4651"><span class="linenos">4651</span></a>
+</span><span id="Parser-4652"><a href="#Parser-4652"><span class="linenos">4652</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span> <span class="c1"># The corresponding match_r_paren will be called in parse_function (caller)</span>
+</span><span id="Parser-4653"><a href="#Parser-4653"><span class="linenos">4653</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
+</span><span id="Parser-4654"><a href="#Parser-4654"><span class="linenos">4654</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">GroupConcat</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">order</span><span class="p">,</span> <span class="n">separator</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
+</span><span id="Parser-4655"><a href="#Parser-4655"><span class="linenos">4655</span></a>
+</span><span id="Parser-4656"><a href="#Parser-4656"><span class="linenos">4656</span></a> <span class="k">def</span> <span class="nf">_parse_convert</span><span class="p">(</span>
+</span><span id="Parser-4657"><a href="#Parser-4657"><span class="linenos">4657</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">strict</span><span class="p">:</span> <span class="nb">bool</span><span class="p">,</span> <span class="n">safe</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4658"><a href="#Parser-4658"><span class="linenos">4658</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4659"><a href="#Parser-4659"><span class="linenos">4659</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-4660"><a href="#Parser-4660"><span class="linenos">4660</span></a>
+</span><span id="Parser-4661"><a href="#Parser-4661"><span class="linenos">4661</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">):</span>
+</span><span id="Parser-4662"><a href="#Parser-4662"><span class="linenos">4662</span></a> <span class="n">to</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4663"><a href="#Parser-4663"><span class="linenos">4663</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSet</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="Parser-4664"><a href="#Parser-4664"><span class="linenos">4664</span></a> <span class="p">)</span>
+</span><span id="Parser-4665"><a href="#Parser-4665"><span class="linenos">4665</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="Parser-4666"><a href="#Parser-4666"><span class="linenos">4666</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="Parser-4667"><a href="#Parser-4667"><span class="linenos">4667</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4668"><a href="#Parser-4668"><span class="linenos">4668</span></a> <span class="n">to</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4669"><a href="#Parser-4669"><span class="linenos">4669</span></a>
+</span><span id="Parser-4670"><a href="#Parser-4670"><span class="linenos">4670</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Cast</span> <span class="k">if</span> <span class="n">strict</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">TryCast</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">to</span><span class="p">,</span> <span class="n">safe</span><span class="o">=</span><span class="n">safe</span><span class="p">)</span>
</span><span id="Parser-4671"><a href="#Parser-4671"><span class="linenos">4671</span></a>
-</span><span id="Parser-4672"><a href="#Parser-4672"><span class="linenos">4672</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">:</span>
-</span><span id="Parser-4673"><a href="#Parser-4673"><span class="linenos">4673</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">charset</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
-</span><span id="Parser-4674"><a href="#Parser-4674"><span class="linenos">4674</span></a>
-</span><span id="Parser-4675"><a href="#Parser-4675"><span class="linenos">4675</span></a> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">args</span>
-</span><span id="Parser-4676"><a href="#Parser-4676"><span class="linenos">4676</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Parser-4677"><a href="#Parser-4677"><span class="linenos">4677</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4672"><a href="#Parser-4672"><span class="linenos">4672</span></a> <span class="k">def</span> <span class="nf">_parse_decode</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Decode</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">]:</span>
+</span><span id="Parser-4673"><a href="#Parser-4673"><span class="linenos">4673</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Parser-4674"><a href="#Parser-4674"><span class="linenos">4674</span></a><span class="sd"> There are generally two variants of the DECODE function:</span>
+</span><span id="Parser-4675"><a href="#Parser-4675"><span class="linenos">4675</span></a>
+</span><span id="Parser-4676"><a href="#Parser-4676"><span class="linenos">4676</span></a><span class="sd"> - DECODE(bin, charset)</span>
+</span><span id="Parser-4677"><a href="#Parser-4677"><span class="linenos">4677</span></a><span class="sd"> - DECODE(expression, search, result [, search, result] ... [, default])</span>
</span><span id="Parser-4678"><a href="#Parser-4678"><span class="linenos">4678</span></a>
-</span><span id="Parser-4679"><a href="#Parser-4679"><span class="linenos">4679</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-4680"><a href="#Parser-4680"><span class="linenos">4680</span></a> <span class="k">for</span> <span class="n">search</span><span class="p">,</span> <span class="n">result</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">expressions</span><span class="p">[::</span><span class="mi">2</span><span class="p">],</span> <span class="n">expressions</span><span class="p">[</span><span class="mi">1</span><span class="p">::</span><span class="mi">2</span><span class="p">]):</span>
-</span><span id="Parser-4681"><a href="#Parser-4681"><span class="linenos">4681</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">search</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
-</span><span id="Parser-4682"><a href="#Parser-4682"><span class="linenos">4682</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4683"><a href="#Parser-4683"><span class="linenos">4683</span></a>
-</span><span id="Parser-4684"><a href="#Parser-4684"><span class="linenos">4684</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
-</span><span id="Parser-4685"><a href="#Parser-4685"><span class="linenos">4685</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-4686"><a href="#Parser-4686"><span class="linenos">4686</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
-</span><span id="Parser-4687"><a href="#Parser-4687"><span class="linenos">4687</span></a> <span class="p">)</span>
-</span><span id="Parser-4688"><a href="#Parser-4688"><span class="linenos">4688</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">):</span>
-</span><span id="Parser-4689"><a href="#Parser-4689"><span class="linenos">4689</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-4690"><a href="#Parser-4690"><span class="linenos">4690</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">()),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
-</span><span id="Parser-4691"><a href="#Parser-4691"><span class="linenos">4691</span></a> <span class="p">)</span>
-</span><span id="Parser-4692"><a href="#Parser-4692"><span class="linenos">4692</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4693"><a href="#Parser-4693"><span class="linenos">4693</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span>
-</span><span id="Parser-4694"><a href="#Parser-4694"><span class="linenos">4694</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span>
-</span><span id="Parser-4695"><a href="#Parser-4695"><span class="linenos">4695</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
-</span><span id="Parser-4696"><a href="#Parser-4696"><span class="linenos">4696</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">()),</span>
-</span><span id="Parser-4697"><a href="#Parser-4697"><span class="linenos">4697</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">search</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">()),</span>
-</span><span id="Parser-4698"><a href="#Parser-4698"><span class="linenos">4698</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-4699"><a href="#Parser-4699"><span class="linenos">4699</span></a> <span class="p">),</span>
-</span><span id="Parser-4700"><a href="#Parser-4700"><span class="linenos">4700</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-4701"><a href="#Parser-4701"><span class="linenos">4701</span></a> <span class="p">)</span>
-</span><span id="Parser-4702"><a href="#Parser-4702"><span class="linenos">4702</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cond</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">))</span>
-</span><span id="Parser-4703"><a href="#Parser-4703"><span class="linenos">4703</span></a>
-</span><span id="Parser-4704"><a href="#Parser-4704"><span class="linenos">4704</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
-</span><span id="Parser-4705"><a href="#Parser-4705"><span class="linenos">4705</span></a>
-</span><span id="Parser-4706"><a href="#Parser-4706"><span class="linenos">4706</span></a> <span class="k">def</span> <span class="nf">_parse_json_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">]:</span>
-</span><span id="Parser-4707"><a href="#Parser-4707"><span class="linenos">4707</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
-</span><span id="Parser-4708"><a href="#Parser-4708"><span class="linenos">4708</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-4709"><a href="#Parser-4709"><span class="linenos">4709</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_SEPARATOR_TOKENS</span><span class="p">)</span>
-</span><span id="Parser-4710"><a href="#Parser-4710"><span class="linenos">4710</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">)</span>
-</span><span id="Parser-4711"><a href="#Parser-4711"><span class="linenos">4711</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-4712"><a href="#Parser-4712"><span class="linenos">4712</span></a>
-</span><span id="Parser-4713"><a href="#Parser-4713"><span class="linenos">4713</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
-</span><span id="Parser-4714"><a href="#Parser-4714"><span class="linenos">4714</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4715"><a href="#Parser-4715"><span class="linenos">4715</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Parser-4679"><a href="#Parser-4679"><span class="linenos">4679</span></a><span class="sd"> The second variant will always be parsed into a CASE expression. Note that NULL</span>
+</span><span id="Parser-4680"><a href="#Parser-4680"><span class="linenos">4680</span></a><span class="sd"> needs special treatment, since we need to explicitly check for it with `IS NULL`,</span>
+</span><span id="Parser-4681"><a href="#Parser-4681"><span class="linenos">4681</span></a><span class="sd"> instead of relying on pattern matching.</span>
+</span><span id="Parser-4682"><a href="#Parser-4682"><span class="linenos">4682</span></a><span class="sd"> &quot;&quot;&quot;</span>
+</span><span id="Parser-4683"><a href="#Parser-4683"><span class="linenos">4683</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="Parser-4684"><a href="#Parser-4684"><span class="linenos">4684</span></a>
+</span><span id="Parser-4685"><a href="#Parser-4685"><span class="linenos">4685</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">:</span>
+</span><span id="Parser-4686"><a href="#Parser-4686"><span class="linenos">4686</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Decode</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">charset</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
+</span><span id="Parser-4687"><a href="#Parser-4687"><span class="linenos">4687</span></a>
+</span><span id="Parser-4688"><a href="#Parser-4688"><span class="linenos">4688</span></a> <span class="n">expression</span><span class="p">,</span> <span class="o">*</span><span class="n">expressions</span> <span class="o">=</span> <span class="n">args</span>
+</span><span id="Parser-4689"><a href="#Parser-4689"><span class="linenos">4689</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Parser-4690"><a href="#Parser-4690"><span class="linenos">4690</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4691"><a href="#Parser-4691"><span class="linenos">4691</span></a>
+</span><span id="Parser-4692"><a href="#Parser-4692"><span class="linenos">4692</span></a> <span class="n">ifs</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-4693"><a href="#Parser-4693"><span class="linenos">4693</span></a> <span class="k">for</span> <span class="n">search</span><span class="p">,</span> <span class="n">result</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">expressions</span><span class="p">[::</span><span class="mi">2</span><span class="p">],</span> <span class="n">expressions</span><span class="p">[</span><span class="mi">1</span><span class="p">::</span><span class="mi">2</span><span class="p">]):</span>
+</span><span id="Parser-4694"><a href="#Parser-4694"><span class="linenos">4694</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">search</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
+</span><span id="Parser-4695"><a href="#Parser-4695"><span class="linenos">4695</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4696"><a href="#Parser-4696"><span class="linenos">4696</span></a>
+</span><span id="Parser-4697"><a href="#Parser-4697"><span class="linenos">4697</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="p">):</span>
+</span><span id="Parser-4698"><a href="#Parser-4698"><span class="linenos">4698</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-4699"><a href="#Parser-4699"><span class="linenos">4699</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
+</span><span id="Parser-4700"><a href="#Parser-4700"><span class="linenos">4700</span></a> <span class="p">)</span>
+</span><span id="Parser-4701"><a href="#Parser-4701"><span class="linenos">4701</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">search</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">):</span>
+</span><span id="Parser-4702"><a href="#Parser-4702"><span class="linenos">4702</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-4703"><a href="#Parser-4703"><span class="linenos">4703</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">()),</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">)</span>
+</span><span id="Parser-4704"><a href="#Parser-4704"><span class="linenos">4704</span></a> <span class="p">)</span>
+</span><span id="Parser-4705"><a href="#Parser-4705"><span class="linenos">4705</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4706"><a href="#Parser-4706"><span class="linenos">4706</span></a> <span class="n">cond</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">or_</span><span class="p">(</span>
+</span><span id="Parser-4707"><a href="#Parser-4707"><span class="linenos">4707</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">search</span><span class="p">),</span>
+</span><span id="Parser-4708"><a href="#Parser-4708"><span class="linenos">4708</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span>
+</span><span id="Parser-4709"><a href="#Parser-4709"><span class="linenos">4709</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">()),</span>
+</span><span id="Parser-4710"><a href="#Parser-4710"><span class="linenos">4710</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Is</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">search</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Null</span><span class="p">()),</span>
+</span><span id="Parser-4711"><a href="#Parser-4711"><span class="linenos">4711</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-4712"><a href="#Parser-4712"><span class="linenos">4712</span></a> <span class="p">),</span>
+</span><span id="Parser-4713"><a href="#Parser-4713"><span class="linenos">4713</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-4714"><a href="#Parser-4714"><span class="linenos">4714</span></a> <span class="p">)</span>
+</span><span id="Parser-4715"><a href="#Parser-4715"><span class="linenos">4715</span></a> <span class="n">ifs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">cond</span><span class="p">,</span> <span class="n">true</span><span class="o">=</span><span class="n">result</span><span class="p">))</span>
</span><span id="Parser-4716"><a href="#Parser-4716"><span class="linenos">4716</span></a>
-</span><span id="Parser-4717"><a href="#Parser-4717"><span class="linenos">4717</span></a> <span class="k">def</span> <span class="nf">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4718"><a href="#Parser-4718"><span class="linenos">4718</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;JSON&quot;</span><span class="p">):</span>
-</span><span id="Parser-4719"><a href="#Parser-4719"><span class="linenos">4719</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4720"><a href="#Parser-4720"><span class="linenos">4720</span></a>
-</span><span id="Parser-4721"><a href="#Parser-4721"><span class="linenos">4721</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">FormatJson</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4722"><a href="#Parser-4722"><span class="linenos">4722</span></a>
-</span><span id="Parser-4723"><a href="#Parser-4723"><span class="linenos">4723</span></a> <span class="k">def</span> <span class="nf">_parse_on_handling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">on</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="n">values</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
-</span><span id="Parser-4724"><a href="#Parser-4724"><span class="linenos">4724</span></a> <span class="c1"># Parses the &quot;X ON Y&quot; syntax, i.e. NULL ON NULL (Oracle, T-SQL)</span>
-</span><span id="Parser-4725"><a href="#Parser-4725"><span class="linenos">4725</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
-</span><span id="Parser-4726"><a href="#Parser-4726"><span class="linenos">4726</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="n">on</span><span class="p">):</span>
-</span><span id="Parser-4727"><a href="#Parser-4727"><span class="linenos">4727</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2"> ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="Parser-4728"><a href="#Parser-4728"><span class="linenos">4728</span></a>
-</span><span id="Parser-4729"><a href="#Parser-4729"><span class="linenos">4729</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-4730"><a href="#Parser-4730"><span class="linenos">4730</span></a>
-</span><span id="Parser-4731"><a href="#Parser-4731"><span class="linenos">4731</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="Parser-4732"><a href="#Parser-4732"><span class="linenos">4732</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">False</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">:</span>
-</span><span id="Parser-4733"><a href="#Parser-4733"><span class="linenos">4733</span></a> <span class="o">...</span>
-</span><span id="Parser-4734"><a href="#Parser-4734"><span class="linenos">4734</span></a>
-</span><span id="Parser-4735"><a href="#Parser-4735"><span class="linenos">4735</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="Parser-4736"><a href="#Parser-4736"><span class="linenos">4736</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">True</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">:</span>
-</span><span id="Parser-4737"><a href="#Parser-4737"><span class="linenos">4737</span></a> <span class="o">...</span>
-</span><span id="Parser-4738"><a href="#Parser-4738"><span class="linenos">4738</span></a>
-</span><span id="Parser-4739"><a href="#Parser-4739"><span class="linenos">4739</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-4740"><a href="#Parser-4740"><span class="linenos">4740</span></a> <span class="n">star</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
-</span><span id="Parser-4741"><a href="#Parser-4741"><span class="linenos">4741</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-4742"><a href="#Parser-4742"><span class="linenos">4742</span></a> <span class="p">[</span><span class="n">star</span><span class="p">]</span>
-</span><span id="Parser-4743"><a href="#Parser-4743"><span class="linenos">4743</span></a> <span class="k">if</span> <span class="n">star</span>
-</span><span id="Parser-4744"><a href="#Parser-4744"><span class="linenos">4744</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_key_value</span><span class="p">()))</span>
-</span><span id="Parser-4745"><a href="#Parser-4745"><span class="linenos">4745</span></a> <span class="p">)</span>
-</span><span id="Parser-4746"><a href="#Parser-4746"><span class="linenos">4746</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;ABSENT&quot;</span><span class="p">)</span>
+</span><span id="Parser-4717"><a href="#Parser-4717"><span class="linenos">4717</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Case</span><span class="p">(</span><span class="n">ifs</span><span class="o">=</span><span class="n">ifs</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">expressions</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">expressions</span><span class="p">)</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="Parser-4718"><a href="#Parser-4718"><span class="linenos">4718</span></a>
+</span><span id="Parser-4719"><a href="#Parser-4719"><span class="linenos">4719</span></a> <span class="k">def</span> <span class="nf">_parse_json_key_value</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">]:</span>
+</span><span id="Parser-4720"><a href="#Parser-4720"><span class="linenos">4720</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEY&quot;</span><span class="p">)</span>
+</span><span id="Parser-4721"><a href="#Parser-4721"><span class="linenos">4721</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-4722"><a href="#Parser-4722"><span class="linenos">4722</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">JSON_KEY_VALUE_SEPARATOR_TOKENS</span><span class="p">)</span>
+</span><span id="Parser-4723"><a href="#Parser-4723"><span class="linenos">4723</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;VALUE&quot;</span><span class="p">)</span>
+</span><span id="Parser-4724"><a href="#Parser-4724"><span class="linenos">4724</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-4725"><a href="#Parser-4725"><span class="linenos">4725</span></a>
+</span><span id="Parser-4726"><a href="#Parser-4726"><span class="linenos">4726</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">value</span><span class="p">:</span>
+</span><span id="Parser-4727"><a href="#Parser-4727"><span class="linenos">4727</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4728"><a href="#Parser-4728"><span class="linenos">4728</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">JSONKeyValue</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">value</span><span class="p">)</span>
+</span><span id="Parser-4729"><a href="#Parser-4729"><span class="linenos">4729</span></a>
+</span><span id="Parser-4730"><a href="#Parser-4730"><span class="linenos">4730</span></a> <span class="k">def</span> <span class="nf">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4731"><a href="#Parser-4731"><span class="linenos">4731</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;FORMAT&quot;</span><span class="p">,</span> <span class="s2">&quot;JSON&quot;</span><span class="p">):</span>
+</span><span id="Parser-4732"><a href="#Parser-4732"><span class="linenos">4732</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4733"><a href="#Parser-4733"><span class="linenos">4733</span></a>
+</span><span id="Parser-4734"><a href="#Parser-4734"><span class="linenos">4734</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">FormatJson</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4735"><a href="#Parser-4735"><span class="linenos">4735</span></a>
+</span><span id="Parser-4736"><a href="#Parser-4736"><span class="linenos">4736</span></a> <span class="k">def</span> <span class="nf">_parse_on_handling</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">on</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="n">values</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
+</span><span id="Parser-4737"><a href="#Parser-4737"><span class="linenos">4737</span></a> <span class="c1"># Parses the &quot;X ON Y&quot; syntax, i.e. NULL ON NULL (Oracle, T-SQL)</span>
+</span><span id="Parser-4738"><a href="#Parser-4738"><span class="linenos">4738</span></a> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
+</span><span id="Parser-4739"><a href="#Parser-4739"><span class="linenos">4739</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="s2">&quot;ON&quot;</span><span class="p">,</span> <span class="n">on</span><span class="p">):</span>
+</span><span id="Parser-4740"><a href="#Parser-4740"><span class="linenos">4740</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2"> ON </span><span class="si">{</span><span class="n">on</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="Parser-4741"><a href="#Parser-4741"><span class="linenos">4741</span></a>
+</span><span id="Parser-4742"><a href="#Parser-4742"><span class="linenos">4742</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-4743"><a href="#Parser-4743"><span class="linenos">4743</span></a>
+</span><span id="Parser-4744"><a href="#Parser-4744"><span class="linenos">4744</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="Parser-4745"><a href="#Parser-4745"><span class="linenos">4745</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">False</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">:</span>
+</span><span id="Parser-4746"><a href="#Parser-4746"><span class="linenos">4746</span></a> <span class="o">...</span>
</span><span id="Parser-4747"><a href="#Parser-4747"><span class="linenos">4747</span></a>
-</span><span id="Parser-4748"><a href="#Parser-4748"><span class="linenos">4748</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4749"><a href="#Parser-4749"><span class="linenos">4749</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4750"><a href="#Parser-4750"><span class="linenos">4750</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-4751"><a href="#Parser-4751"><span class="linenos">4751</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4752"><a href="#Parser-4752"><span class="linenos">4752</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-4753"><a href="#Parser-4753"><span class="linenos">4753</span></a>
-</span><span id="Parser-4754"><a href="#Parser-4754"><span class="linenos">4754</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEYS&quot;</span><span class="p">)</span>
-</span><span id="Parser-4755"><a href="#Parser-4755"><span class="linenos">4755</span></a>
-</span><span id="Parser-4756"><a href="#Parser-4756"><span class="linenos">4756</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span>
-</span><span id="Parser-4757"><a href="#Parser-4757"><span class="linenos">4757</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="Parser-4748"><a href="#Parser-4748"><span class="linenos">4748</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="Parser-4749"><a href="#Parser-4749"><span class="linenos">4749</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="p">:</span> <span class="n">Lit</span><span class="p">[</span><span class="kc">True</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span><span class="p">:</span>
+</span><span id="Parser-4750"><a href="#Parser-4750"><span class="linenos">4750</span></a> <span class="o">...</span>
+</span><span id="Parser-4751"><a href="#Parser-4751"><span class="linenos">4751</span></a>
+</span><span id="Parser-4752"><a href="#Parser-4752"><span class="linenos">4752</span></a> <span class="k">def</span> <span class="nf">_parse_json_object</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">agg</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-4753"><a href="#Parser-4753"><span class="linenos">4753</span></a> <span class="n">star</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="Parser-4754"><a href="#Parser-4754"><span class="linenos">4754</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-4755"><a href="#Parser-4755"><span class="linenos">4755</span></a> <span class="p">[</span><span class="n">star</span><span class="p">]</span>
+</span><span id="Parser-4756"><a href="#Parser-4756"><span class="linenos">4756</span></a> <span class="k">if</span> <span class="n">star</span>
+</span><span id="Parser-4757"><a href="#Parser-4757"><span class="linenos">4757</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_key_value</span><span class="p">()))</span>
</span><span id="Parser-4758"><a href="#Parser-4758"><span class="linenos">4758</span></a> <span class="p">)</span>
-</span><span id="Parser-4759"><a href="#Parser-4759"><span class="linenos">4759</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENCODING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="Parser-4759"><a href="#Parser-4759"><span class="linenos">4759</span></a> <span class="n">null_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">,</span> <span class="s2">&quot;ABSENT&quot;</span><span class="p">)</span>
</span><span id="Parser-4760"><a href="#Parser-4760"><span class="linenos">4760</span></a>
-</span><span id="Parser-4761"><a href="#Parser-4761"><span class="linenos">4761</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4762"><a href="#Parser-4762"><span class="linenos">4762</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span> <span class="k">if</span> <span class="n">agg</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
-</span><span id="Parser-4763"><a href="#Parser-4763"><span class="linenos">4763</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
-</span><span id="Parser-4764"><a href="#Parser-4764"><span class="linenos">4764</span></a> <span class="n">null_handling</span><span class="o">=</span><span class="n">null_handling</span><span class="p">,</span>
-</span><span id="Parser-4765"><a href="#Parser-4765"><span class="linenos">4765</span></a> <span class="n">unique_keys</span><span class="o">=</span><span class="n">unique_keys</span><span class="p">,</span>
-</span><span id="Parser-4766"><a href="#Parser-4766"><span class="linenos">4766</span></a> <span class="n">return_type</span><span class="o">=</span><span class="n">return_type</span><span class="p">,</span>
-</span><span id="Parser-4767"><a href="#Parser-4767"><span class="linenos">4767</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
-</span><span id="Parser-4768"><a href="#Parser-4768"><span class="linenos">4768</span></a> <span class="p">)</span>
-</span><span id="Parser-4769"><a href="#Parser-4769"><span class="linenos">4769</span></a>
-</span><span id="Parser-4770"><a href="#Parser-4770"><span class="linenos">4770</span></a> <span class="c1"># Note: this is currently incomplete; it only implements the &quot;JSON_value_column&quot; part</span>
-</span><span id="Parser-4771"><a href="#Parser-4771"><span class="linenos">4771</span></a> <span class="k">def</span> <span class="nf">_parse_json_column_def</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">:</span>
-</span><span id="Parser-4772"><a href="#Parser-4772"><span class="linenos">4772</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NESTED&quot;</span><span class="p">):</span>
-</span><span id="Parser-4773"><a href="#Parser-4773"><span class="linenos">4773</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-4774"><a href="#Parser-4774"><span class="linenos">4774</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-4775"><a href="#Parser-4775"><span class="linenos">4775</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4776"><a href="#Parser-4776"><span class="linenos">4776</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4777"><a href="#Parser-4777"><span class="linenos">4777</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4778"><a href="#Parser-4778"><span class="linenos">4778</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4779"><a href="#Parser-4779"><span class="linenos">4779</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="Parser-4780"><a href="#Parser-4780"><span class="linenos">4780</span></a>
-</span><span id="Parser-4781"><a href="#Parser-4781"><span class="linenos">4781</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATH&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-4782"><a href="#Parser-4782"><span class="linenos">4782</span></a> <span class="n">nested_schema</span> <span class="o">=</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
-</span><span id="Parser-4783"><a href="#Parser-4783"><span class="linenos">4783</span></a>
-</span><span id="Parser-4784"><a href="#Parser-4784"><span class="linenos">4784</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4785"><a href="#Parser-4785"><span class="linenos">4785</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">,</span>
-</span><span id="Parser-4786"><a href="#Parser-4786"><span class="linenos">4786</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4787"><a href="#Parser-4787"><span class="linenos">4787</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Parser-4788"><a href="#Parser-4788"><span class="linenos">4788</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="Parser-4789"><a href="#Parser-4789"><span class="linenos">4789</span></a> <span class="n">nested_schema</span><span class="o">=</span><span class="n">nested_schema</span><span class="p">,</span>
-</span><span id="Parser-4790"><a href="#Parser-4790"><span class="linenos">4790</span></a> <span class="p">)</span>
-</span><span id="Parser-4791"><a href="#Parser-4791"><span class="linenos">4791</span></a>
-</span><span id="Parser-4792"><a href="#Parser-4792"><span class="linenos">4792</span></a> <span class="k">def</span> <span class="nf">_parse_json_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">:</span>
-</span><span id="Parser-4793"><a href="#Parser-4793"><span class="linenos">4793</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span>
-</span><span id="Parser-4794"><a href="#Parser-4794"><span class="linenos">4794</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4795"><a href="#Parser-4795"><span class="linenos">4795</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">,</span>
-</span><span id="Parser-4796"><a href="#Parser-4796"><span class="linenos">4796</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_column_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
-</span><span id="Parser-4797"><a href="#Parser-4797"><span class="linenos">4797</span></a> <span class="p">)</span>
-</span><span id="Parser-4798"><a href="#Parser-4798"><span class="linenos">4798</span></a>
-</span><span id="Parser-4799"><a href="#Parser-4799"><span class="linenos">4799</span></a> <span class="k">def</span> <span class="nf">_parse_json_table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">:</span>
-</span><span id="Parser-4800"><a href="#Parser-4800"><span class="linenos">4800</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4801"><a href="#Parser-4801"><span class="linenos">4801</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-4802"><a href="#Parser-4802"><span class="linenos">4802</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
-</span><span id="Parser-4803"><a href="#Parser-4803"><span class="linenos">4803</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
-</span><span id="Parser-4804"><a href="#Parser-4804"><span class="linenos">4804</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
-</span><span id="Parser-4805"><a href="#Parser-4805"><span class="linenos">4805</span></a>
-</span><span id="Parser-4806"><a href="#Parser-4806"><span class="linenos">4806</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">(</span>
-</span><span id="Parser-4807"><a href="#Parser-4807"><span class="linenos">4807</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4808"><a href="#Parser-4808"><span class="linenos">4808</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
-</span><span id="Parser-4809"><a href="#Parser-4809"><span class="linenos">4809</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
-</span><span id="Parser-4810"><a href="#Parser-4810"><span class="linenos">4810</span></a> <span class="n">error_handling</span><span class="o">=</span><span class="n">error_handling</span><span class="p">,</span>
-</span><span id="Parser-4811"><a href="#Parser-4811"><span class="linenos">4811</span></a> <span class="n">empty_handling</span><span class="o">=</span><span class="n">empty_handling</span><span class="p">,</span>
-</span><span id="Parser-4812"><a href="#Parser-4812"><span class="linenos">4812</span></a> <span class="p">)</span>
-</span><span id="Parser-4813"><a href="#Parser-4813"><span class="linenos">4813</span></a>
-</span><span id="Parser-4814"><a href="#Parser-4814"><span class="linenos">4814</span></a> <span class="k">def</span> <span class="nf">_parse_match_against</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">:</span>
-</span><span id="Parser-4815"><a href="#Parser-4815"><span class="linenos">4815</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="Parser-4816"><a href="#Parser-4816"><span class="linenos">4816</span></a>
-</span><span id="Parser-4817"><a href="#Parser-4817"><span class="linenos">4817</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">,</span> <span class="s2">&quot;AGAINST&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">)</span>
+</span><span id="Parser-4761"><a href="#Parser-4761"><span class="linenos">4761</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4762"><a href="#Parser-4762"><span class="linenos">4762</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4763"><a href="#Parser-4763"><span class="linenos">4763</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-4764"><a href="#Parser-4764"><span class="linenos">4764</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHOUT&quot;</span><span class="p">,</span> <span class="s2">&quot;UNIQUE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4765"><a href="#Parser-4765"><span class="linenos">4765</span></a> <span class="n">unique_keys</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-4766"><a href="#Parser-4766"><span class="linenos">4766</span></a>
+</span><span id="Parser-4767"><a href="#Parser-4767"><span class="linenos">4767</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;KEYS&quot;</span><span class="p">)</span>
+</span><span id="Parser-4768"><a href="#Parser-4768"><span class="linenos">4768</span></a>
+</span><span id="Parser-4769"><a href="#Parser-4769"><span class="linenos">4769</span></a> <span class="n">return_type</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RETURNING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span>
+</span><span id="Parser-4770"><a href="#Parser-4770"><span class="linenos">4770</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_type</span><span class="p">()</span>
+</span><span id="Parser-4771"><a href="#Parser-4771"><span class="linenos">4771</span></a> <span class="p">)</span>
+</span><span id="Parser-4772"><a href="#Parser-4772"><span class="linenos">4772</span></a> <span class="n">encoding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENCODING&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span>
+</span><span id="Parser-4773"><a href="#Parser-4773"><span class="linenos">4773</span></a>
+</span><span id="Parser-4774"><a href="#Parser-4774"><span class="linenos">4774</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4775"><a href="#Parser-4775"><span class="linenos">4775</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObjectAgg</span> <span class="k">if</span> <span class="n">agg</span> <span class="k">else</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONObject</span><span class="p">,</span>
+</span><span id="Parser-4776"><a href="#Parser-4776"><span class="linenos">4776</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span>
+</span><span id="Parser-4777"><a href="#Parser-4777"><span class="linenos">4777</span></a> <span class="n">null_handling</span><span class="o">=</span><span class="n">null_handling</span><span class="p">,</span>
+</span><span id="Parser-4778"><a href="#Parser-4778"><span class="linenos">4778</span></a> <span class="n">unique_keys</span><span class="o">=</span><span class="n">unique_keys</span><span class="p">,</span>
+</span><span id="Parser-4779"><a href="#Parser-4779"><span class="linenos">4779</span></a> <span class="n">return_type</span><span class="o">=</span><span class="n">return_type</span><span class="p">,</span>
+</span><span id="Parser-4780"><a href="#Parser-4780"><span class="linenos">4780</span></a> <span class="n">encoding</span><span class="o">=</span><span class="n">encoding</span><span class="p">,</span>
+</span><span id="Parser-4781"><a href="#Parser-4781"><span class="linenos">4781</span></a> <span class="p">)</span>
+</span><span id="Parser-4782"><a href="#Parser-4782"><span class="linenos">4782</span></a>
+</span><span id="Parser-4783"><a href="#Parser-4783"><span class="linenos">4783</span></a> <span class="c1"># Note: this is currently incomplete; it only implements the &quot;JSON_value_column&quot; part</span>
+</span><span id="Parser-4784"><a href="#Parser-4784"><span class="linenos">4784</span></a> <span class="k">def</span> <span class="nf">_parse_json_column_def</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">:</span>
+</span><span id="Parser-4785"><a href="#Parser-4785"><span class="linenos">4785</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NESTED&quot;</span><span class="p">):</span>
+</span><span id="Parser-4786"><a href="#Parser-4786"><span class="linenos">4786</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-4787"><a href="#Parser-4787"><span class="linenos">4787</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">allow_identifiers</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-4788"><a href="#Parser-4788"><span class="linenos">4788</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4789"><a href="#Parser-4789"><span class="linenos">4789</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4790"><a href="#Parser-4790"><span class="linenos">4790</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4791"><a href="#Parser-4791"><span class="linenos">4791</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4792"><a href="#Parser-4792"><span class="linenos">4792</span></a> <span class="n">nested</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="Parser-4793"><a href="#Parser-4793"><span class="linenos">4793</span></a>
+</span><span id="Parser-4794"><a href="#Parser-4794"><span class="linenos">4794</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;PATH&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-4795"><a href="#Parser-4795"><span class="linenos">4795</span></a> <span class="n">nested_schema</span> <span class="o">=</span> <span class="n">nested</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
+</span><span id="Parser-4796"><a href="#Parser-4796"><span class="linenos">4796</span></a>
+</span><span id="Parser-4797"><a href="#Parser-4797"><span class="linenos">4797</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4798"><a href="#Parser-4798"><span class="linenos">4798</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONColumnDef</span><span class="p">,</span>
+</span><span id="Parser-4799"><a href="#Parser-4799"><span class="linenos">4799</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4800"><a href="#Parser-4800"><span class="linenos">4800</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Parser-4801"><a href="#Parser-4801"><span class="linenos">4801</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="Parser-4802"><a href="#Parser-4802"><span class="linenos">4802</span></a> <span class="n">nested_schema</span><span class="o">=</span><span class="n">nested_schema</span><span class="p">,</span>
+</span><span id="Parser-4803"><a href="#Parser-4803"><span class="linenos">4803</span></a> <span class="p">)</span>
+</span><span id="Parser-4804"><a href="#Parser-4804"><span class="linenos">4804</span></a>
+</span><span id="Parser-4805"><a href="#Parser-4805"><span class="linenos">4805</span></a> <span class="k">def</span> <span class="nf">_parse_json_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">:</span>
+</span><span id="Parser-4806"><a href="#Parser-4806"><span class="linenos">4806</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span>
+</span><span id="Parser-4807"><a href="#Parser-4807"><span class="linenos">4807</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4808"><a href="#Parser-4808"><span class="linenos">4808</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONSchema</span><span class="p">,</span>
+</span><span id="Parser-4809"><a href="#Parser-4809"><span class="linenos">4809</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_column_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+</span><span id="Parser-4810"><a href="#Parser-4810"><span class="linenos">4810</span></a> <span class="p">)</span>
+</span><span id="Parser-4811"><a href="#Parser-4811"><span class="linenos">4811</span></a>
+</span><span id="Parser-4812"><a href="#Parser-4812"><span class="linenos">4812</span></a> <span class="k">def</span> <span class="nf">_parse_json_table</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">:</span>
+</span><span id="Parser-4813"><a href="#Parser-4813"><span class="linenos">4813</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_format_json</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="Parser-4814"><a href="#Parser-4814"><span class="linenos">4814</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-4815"><a href="#Parser-4815"><span class="linenos">4815</span></a> <span class="n">error_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
+</span><span id="Parser-4816"><a href="#Parser-4816"><span class="linenos">4816</span></a> <span class="n">empty_handling</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_on_handling</span><span class="p">(</span><span class="s2">&quot;EMPTY&quot;</span><span class="p">,</span> <span class="s2">&quot;ERROR&quot;</span><span class="p">,</span> <span class="s2">&quot;NULL&quot;</span><span class="p">)</span>
+</span><span id="Parser-4817"><a href="#Parser-4817"><span class="linenos">4817</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_json_schema</span><span class="p">()</span>
</span><span id="Parser-4818"><a href="#Parser-4818"><span class="linenos">4818</span></a>
-</span><span id="Parser-4819"><a href="#Parser-4819"><span class="linenos">4819</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-4820"><a href="#Parser-4820"><span class="linenos">4820</span></a>
-</span><span id="Parser-4821"><a href="#Parser-4821"><span class="linenos">4821</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;NATURAL&quot;</span><span class="p">,</span> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4822"><a href="#Parser-4822"><span class="linenos">4822</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN NATURAL LANGUAGE MODE&quot;</span>
-</span><span id="Parser-4823"><a href="#Parser-4823"><span class="linenos">4823</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
-</span><span id="Parser-4824"><a href="#Parser-4824"><span class="linenos">4824</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2"> WITH QUERY EXPANSION&quot;</span>
-</span><span id="Parser-4825"><a href="#Parser-4825"><span class="linenos">4825</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
-</span><span id="Parser-4826"><a href="#Parser-4826"><span class="linenos">4826</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
-</span><span id="Parser-4827"><a href="#Parser-4827"><span class="linenos">4827</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
-</span><span id="Parser-4828"><a href="#Parser-4828"><span class="linenos">4828</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
-</span><span id="Parser-4829"><a href="#Parser-4829"><span class="linenos">4829</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4830"><a href="#Parser-4830"><span class="linenos">4830</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4819"><a href="#Parser-4819"><span class="linenos">4819</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JSONTable</span><span class="p">(</span>
+</span><span id="Parser-4820"><a href="#Parser-4820"><span class="linenos">4820</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4821"><a href="#Parser-4821"><span class="linenos">4821</span></a> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">,</span>
+</span><span id="Parser-4822"><a href="#Parser-4822"><span class="linenos">4822</span></a> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span>
+</span><span id="Parser-4823"><a href="#Parser-4823"><span class="linenos">4823</span></a> <span class="n">error_handling</span><span class="o">=</span><span class="n">error_handling</span><span class="p">,</span>
+</span><span id="Parser-4824"><a href="#Parser-4824"><span class="linenos">4824</span></a> <span class="n">empty_handling</span><span class="o">=</span><span class="n">empty_handling</span><span class="p">,</span>
+</span><span id="Parser-4825"><a href="#Parser-4825"><span class="linenos">4825</span></a> <span class="p">)</span>
+</span><span id="Parser-4826"><a href="#Parser-4826"><span class="linenos">4826</span></a>
+</span><span id="Parser-4827"><a href="#Parser-4827"><span class="linenos">4827</span></a> <span class="k">def</span> <span class="nf">_parse_match_against</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">:</span>
+</span><span id="Parser-4828"><a href="#Parser-4828"><span class="linenos">4828</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="Parser-4829"><a href="#Parser-4829"><span class="linenos">4829</span></a>
+</span><span id="Parser-4830"><a href="#Parser-4830"><span class="linenos">4830</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">,</span> <span class="s2">&quot;AGAINST&quot;</span><span class="p">,</span> <span class="s2">&quot;(&quot;</span><span class="p">)</span>
</span><span id="Parser-4831"><a href="#Parser-4831"><span class="linenos">4831</span></a>
-</span><span id="Parser-4832"><a href="#Parser-4832"><span class="linenos">4832</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4833"><a href="#Parser-4833"><span class="linenos">4833</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">modifier</span><span class="o">=</span><span class="n">modifier</span>
-</span><span id="Parser-4834"><a href="#Parser-4834"><span class="linenos">4834</span></a> <span class="p">)</span>
-</span><span id="Parser-4835"><a href="#Parser-4835"><span class="linenos">4835</span></a>
-</span><span id="Parser-4836"><a href="#Parser-4836"><span class="linenos">4836</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver16</span>
-</span><span id="Parser-4837"><a href="#Parser-4837"><span class="linenos">4837</span></a> <span class="k">def</span> <span class="nf">_parse_open_json</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">:</span>
-</span><span id="Parser-4838"><a href="#Parser-4838"><span class="linenos">4838</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-4839"><a href="#Parser-4839"><span class="linenos">4839</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-4840"><a href="#Parser-4840"><span class="linenos">4840</span></a>
-</span><span id="Parser-4841"><a href="#Parser-4841"><span class="linenos">4841</span></a> <span class="k">def</span> <span class="nf">_parse_open_json_column_def</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">:</span>
-</span><span id="Parser-4842"><a href="#Parser-4842"><span class="linenos">4842</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4843"><a href="#Parser-4843"><span class="linenos">4843</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
-</span><span id="Parser-4844"><a href="#Parser-4844"><span class="linenos">4844</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-4845"><a href="#Parser-4845"><span class="linenos">4845</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">)</span>
-</span><span id="Parser-4846"><a href="#Parser-4846"><span class="linenos">4846</span></a>
-</span><span id="Parser-4847"><a href="#Parser-4847"><span class="linenos">4847</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4848"><a href="#Parser-4848"><span class="linenos">4848</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">as_json</span><span class="o">=</span><span class="n">as_json</span>
-</span><span id="Parser-4849"><a href="#Parser-4849"><span class="linenos">4849</span></a> <span class="p">)</span>
-</span><span id="Parser-4850"><a href="#Parser-4850"><span class="linenos">4850</span></a>
-</span><span id="Parser-4851"><a href="#Parser-4851"><span class="linenos">4851</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4852"><a href="#Parser-4852"><span class="linenos">4852</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
-</span><span id="Parser-4853"><a href="#Parser-4853"><span class="linenos">4853</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="Parser-4854"><a href="#Parser-4854"><span class="linenos">4854</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_open_json_column_def</span><span class="p">)</span>
-</span><span id="Parser-4855"><a href="#Parser-4855"><span class="linenos">4855</span></a>
-</span><span id="Parser-4856"><a href="#Parser-4856"><span class="linenos">4856</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-4857"><a href="#Parser-4857"><span class="linenos">4857</span></a>
-</span><span id="Parser-4858"><a href="#Parser-4858"><span class="linenos">4858</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
-</span><span id="Parser-4859"><a href="#Parser-4859"><span class="linenos">4859</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
-</span><span id="Parser-4860"><a href="#Parser-4860"><span class="linenos">4860</span></a>
-</span><span id="Parser-4861"><a href="#Parser-4861"><span class="linenos">4861</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
-</span><span id="Parser-4862"><a href="#Parser-4862"><span class="linenos">4862</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4863"><a href="#Parser-4863"><span class="linenos">4863</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Parser-4864"><a href="#Parser-4864"><span class="linenos">4864</span></a> <span class="p">)</span>
-</span><span id="Parser-4865"><a href="#Parser-4865"><span class="linenos">4865</span></a>
-</span><span id="Parser-4866"><a href="#Parser-4866"><span class="linenos">4866</span></a> <span class="k">if</span> <span class="n">haystack_first</span><span class="p">:</span>
-</span><span id="Parser-4867"><a href="#Parser-4867"><span class="linenos">4867</span></a> <span class="n">haystack</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Parser-4868"><a href="#Parser-4868"><span class="linenos">4868</span></a> <span class="n">needle</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-4869"><a href="#Parser-4869"><span class="linenos">4869</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4870"><a href="#Parser-4870"><span class="linenos">4870</span></a> <span class="n">needle</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
-</span><span id="Parser-4871"><a href="#Parser-4871"><span class="linenos">4871</span></a> <span class="n">haystack</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-4872"><a href="#Parser-4872"><span class="linenos">4872</span></a>
-</span><span id="Parser-4873"><a href="#Parser-4873"><span class="linenos">4873</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4874"><a href="#Parser-4874"><span class="linenos">4874</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">haystack</span><span class="p">,</span> <span class="n">substr</span><span class="o">=</span><span class="n">needle</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
-</span><span id="Parser-4875"><a href="#Parser-4875"><span class="linenos">4875</span></a> <span class="p">)</span>
-</span><span id="Parser-4876"><a href="#Parser-4876"><span class="linenos">4876</span></a>
-</span><span id="Parser-4877"><a href="#Parser-4877"><span class="linenos">4877</span></a> <span class="k">def</span> <span class="nf">_parse_predict</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">:</span>
-</span><span id="Parser-4878"><a href="#Parser-4878"><span class="linenos">4878</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MODEL&quot;</span><span class="p">)</span>
-</span><span id="Parser-4879"><a href="#Parser-4879"><span class="linenos">4879</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="Parser-4880"><a href="#Parser-4880"><span class="linenos">4880</span></a>
-</span><span id="Parser-4881"><a href="#Parser-4881"><span class="linenos">4881</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
-</span><span id="Parser-4882"><a href="#Parser-4882"><span class="linenos">4882</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">)</span>
-</span><span id="Parser-4883"><a href="#Parser-4883"><span class="linenos">4883</span></a>
-</span><span id="Parser-4884"><a href="#Parser-4884"><span class="linenos">4884</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4885"><a href="#Parser-4885"><span class="linenos">4885</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">,</span>
-</span><span id="Parser-4886"><a href="#Parser-4886"><span class="linenos">4886</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-4887"><a href="#Parser-4887"><span class="linenos">4887</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
-</span><span id="Parser-4888"><a href="#Parser-4888"><span class="linenos">4888</span></a> <span class="n">params_struct</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
-</span><span id="Parser-4889"><a href="#Parser-4889"><span class="linenos">4889</span></a> <span class="p">)</span>
-</span><span id="Parser-4890"><a href="#Parser-4890"><span class="linenos">4890</span></a>
-</span><span id="Parser-4891"><a href="#Parser-4891"><span class="linenos">4891</span></a> <span class="k">def</span> <span class="nf">_parse_join_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">:</span>
-</span><span id="Parser-4892"><a href="#Parser-4892"><span class="linenos">4892</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">)</span>
-</span><span id="Parser-4893"><a href="#Parser-4893"><span class="linenos">4893</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">func_name</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
-</span><span id="Parser-4894"><a href="#Parser-4894"><span class="linenos">4894</span></a>
-</span><span id="Parser-4895"><a href="#Parser-4895"><span class="linenos">4895</span></a> <span class="k">def</span> <span class="nf">_parse_substring</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span>
-</span><span id="Parser-4896"><a href="#Parser-4896"><span class="linenos">4896</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
-</span><span id="Parser-4897"><a href="#Parser-4897"><span class="linenos">4897</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
-</span><span id="Parser-4898"><a href="#Parser-4898"><span class="linenos">4898</span></a>
-</span><span id="Parser-4899"><a href="#Parser-4899"><span class="linenos">4899</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">))</span>
-</span><span id="Parser-4900"><a href="#Parser-4900"><span class="linenos">4900</span></a>
-</span><span id="Parser-4901"><a href="#Parser-4901"><span class="linenos">4901</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
-</span><span id="Parser-4902"><a href="#Parser-4902"><span class="linenos">4902</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4903"><a href="#Parser-4903"><span class="linenos">4903</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
-</span><span id="Parser-4904"><a href="#Parser-4904"><span class="linenos">4904</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
-</span><span id="Parser-4905"><a href="#Parser-4905"><span class="linenos">4905</span></a>
-</span><span id="Parser-4906"><a href="#Parser-4906"><span class="linenos">4906</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4832"><a href="#Parser-4832"><span class="linenos">4832</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-4833"><a href="#Parser-4833"><span class="linenos">4833</span></a>
+</span><span id="Parser-4834"><a href="#Parser-4834"><span class="linenos">4834</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;NATURAL&quot;</span><span class="p">,</span> <span class="s2">&quot;LANGUAGE&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4835"><a href="#Parser-4835"><span class="linenos">4835</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN NATURAL LANGUAGE MODE&quot;</span>
+</span><span id="Parser-4836"><a href="#Parser-4836"><span class="linenos">4836</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
+</span><span id="Parser-4837"><a href="#Parser-4837"><span class="linenos">4837</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">modifier</span><span class="si">}</span><span class="s2"> WITH QUERY EXPANSION&quot;</span>
+</span><span id="Parser-4838"><a href="#Parser-4838"><span class="linenos">4838</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IN&quot;</span><span class="p">,</span> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">,</span> <span class="s2">&quot;MODE&quot;</span><span class="p">):</span>
+</span><span id="Parser-4839"><a href="#Parser-4839"><span class="linenos">4839</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;IN BOOLEAN MODE&quot;</span>
+</span><span id="Parser-4840"><a href="#Parser-4840"><span class="linenos">4840</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITH&quot;</span><span class="p">,</span> <span class="s2">&quot;QUERY&quot;</span><span class="p">,</span> <span class="s2">&quot;EXPANSION&quot;</span><span class="p">):</span>
+</span><span id="Parser-4841"><a href="#Parser-4841"><span class="linenos">4841</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="s2">&quot;WITH QUERY EXPANSION&quot;</span>
+</span><span id="Parser-4842"><a href="#Parser-4842"><span class="linenos">4842</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4843"><a href="#Parser-4843"><span class="linenos">4843</span></a> <span class="n">modifier</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4844"><a href="#Parser-4844"><span class="linenos">4844</span></a>
+</span><span id="Parser-4845"><a href="#Parser-4845"><span class="linenos">4845</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4846"><a href="#Parser-4846"><span class="linenos">4846</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">MatchAgainst</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">,</span> <span class="n">modifier</span><span class="o">=</span><span class="n">modifier</span>
+</span><span id="Parser-4847"><a href="#Parser-4847"><span class="linenos">4847</span></a> <span class="p">)</span>
+</span><span id="Parser-4848"><a href="#Parser-4848"><span class="linenos">4848</span></a>
+</span><span id="Parser-4849"><a href="#Parser-4849"><span class="linenos">4849</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver16</span>
+</span><span id="Parser-4850"><a href="#Parser-4850"><span class="linenos">4850</span></a> <span class="k">def</span> <span class="nf">_parse_open_json</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">:</span>
+</span><span id="Parser-4851"><a href="#Parser-4851"><span class="linenos">4851</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-4852"><a href="#Parser-4852"><span class="linenos">4852</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-4853"><a href="#Parser-4853"><span class="linenos">4853</span></a>
+</span><span id="Parser-4854"><a href="#Parser-4854"><span class="linenos">4854</span></a> <span class="k">def</span> <span class="nf">_parse_open_json_column_def</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">:</span>
+</span><span id="Parser-4855"><a href="#Parser-4855"><span class="linenos">4855</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4856"><a href="#Parser-4856"><span class="linenos">4856</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">()</span>
+</span><span id="Parser-4857"><a href="#Parser-4857"><span class="linenos">4857</span></a> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-4858"><a href="#Parser-4858"><span class="linenos">4858</span></a> <span class="n">as_json</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">JSON</span><span class="p">)</span>
+</span><span id="Parser-4859"><a href="#Parser-4859"><span class="linenos">4859</span></a>
+</span><span id="Parser-4860"><a href="#Parser-4860"><span class="linenos">4860</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4861"><a href="#Parser-4861"><span class="linenos">4861</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OpenJSONColumnDef</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">as_json</span><span class="o">=</span><span class="n">as_json</span>
+</span><span id="Parser-4862"><a href="#Parser-4862"><span class="linenos">4862</span></a> <span class="p">)</span>
+</span><span id="Parser-4863"><a href="#Parser-4863"><span class="linenos">4863</span></a>
+</span><span id="Parser-4864"><a href="#Parser-4864"><span class="linenos">4864</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4865"><a href="#Parser-4865"><span class="linenos">4865</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">WITH</span><span class="p">):</span>
+</span><span id="Parser-4866"><a href="#Parser-4866"><span class="linenos">4866</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="Parser-4867"><a href="#Parser-4867"><span class="linenos">4867</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">_parse_open_json_column_def</span><span class="p">)</span>
+</span><span id="Parser-4868"><a href="#Parser-4868"><span class="linenos">4868</span></a>
+</span><span id="Parser-4869"><a href="#Parser-4869"><span class="linenos">4869</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">OpenJSON</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">path</span><span class="o">=</span><span class="n">path</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-4870"><a href="#Parser-4870"><span class="linenos">4870</span></a>
+</span><span id="Parser-4871"><a href="#Parser-4871"><span class="linenos">4871</span></a> <span class="k">def</span> <span class="nf">_parse_position</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">haystack_first</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">:</span>
+</span><span id="Parser-4872"><a href="#Parser-4872"><span class="linenos">4872</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">)</span>
+</span><span id="Parser-4873"><a href="#Parser-4873"><span class="linenos">4873</span></a>
+</span><span id="Parser-4874"><a href="#Parser-4874"><span class="linenos">4874</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
+</span><span id="Parser-4875"><a href="#Parser-4875"><span class="linenos">4875</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4876"><a href="#Parser-4876"><span class="linenos">4876</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span> <span class="n">substr</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Parser-4877"><a href="#Parser-4877"><span class="linenos">4877</span></a> <span class="p">)</span>
+</span><span id="Parser-4878"><a href="#Parser-4878"><span class="linenos">4878</span></a>
+</span><span id="Parser-4879"><a href="#Parser-4879"><span class="linenos">4879</span></a> <span class="k">if</span> <span class="n">haystack_first</span><span class="p">:</span>
+</span><span id="Parser-4880"><a href="#Parser-4880"><span class="linenos">4880</span></a> <span class="n">haystack</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Parser-4881"><a href="#Parser-4881"><span class="linenos">4881</span></a> <span class="n">needle</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-4882"><a href="#Parser-4882"><span class="linenos">4882</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-4883"><a href="#Parser-4883"><span class="linenos">4883</span></a> <span class="n">needle</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
+</span><span id="Parser-4884"><a href="#Parser-4884"><span class="linenos">4884</span></a> <span class="n">haystack</span> <span class="o">=</span> <span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-4885"><a href="#Parser-4885"><span class="linenos">4885</span></a>
+</span><span id="Parser-4886"><a href="#Parser-4886"><span class="linenos">4886</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4887"><a href="#Parser-4887"><span class="linenos">4887</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">haystack</span><span class="p">,</span> <span class="n">substr</span><span class="o">=</span><span class="n">needle</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
+</span><span id="Parser-4888"><a href="#Parser-4888"><span class="linenos">4888</span></a> <span class="p">)</span>
+</span><span id="Parser-4889"><a href="#Parser-4889"><span class="linenos">4889</span></a>
+</span><span id="Parser-4890"><a href="#Parser-4890"><span class="linenos">4890</span></a> <span class="k">def</span> <span class="nf">_parse_predict</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">:</span>
+</span><span id="Parser-4891"><a href="#Parser-4891"><span class="linenos">4891</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MODEL&quot;</span><span class="p">)</span>
+</span><span id="Parser-4892"><a href="#Parser-4892"><span class="linenos">4892</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="Parser-4893"><a href="#Parser-4893"><span class="linenos">4893</span></a>
+</span><span id="Parser-4894"><a href="#Parser-4894"><span class="linenos">4894</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span>
+</span><span id="Parser-4895"><a href="#Parser-4895"><span class="linenos">4895</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TABLE&quot;</span><span class="p">)</span>
+</span><span id="Parser-4896"><a href="#Parser-4896"><span class="linenos">4896</span></a>
+</span><span id="Parser-4897"><a href="#Parser-4897"><span class="linenos">4897</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4898"><a href="#Parser-4898"><span class="linenos">4898</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Predict</span><span class="p">,</span>
+</span><span id="Parser-4899"><a href="#Parser-4899"><span class="linenos">4899</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-4900"><a href="#Parser-4900"><span class="linenos">4900</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(),</span>
+</span><span id="Parser-4901"><a href="#Parser-4901"><span class="linenos">4901</span></a> <span class="n">params_struct</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">(),</span>
+</span><span id="Parser-4902"><a href="#Parser-4902"><span class="linenos">4902</span></a> <span class="p">)</span>
+</span><span id="Parser-4903"><a href="#Parser-4903"><span class="linenos">4903</span></a>
+</span><span id="Parser-4904"><a href="#Parser-4904"><span class="linenos">4904</span></a> <span class="k">def</span> <span class="nf">_parse_join_hint</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">:</span>
+</span><span id="Parser-4905"><a href="#Parser-4905"><span class="linenos">4905</span></a> <span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">)</span>
+</span><span id="Parser-4906"><a href="#Parser-4906"><span class="linenos">4906</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">JoinHint</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">func_name</span><span class="o">.</span><span class="n">upper</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="n">args</span><span class="p">)</span>
</span><span id="Parser-4907"><a href="#Parser-4907"><span class="linenos">4907</span></a>
-</span><span id="Parser-4908"><a href="#Parser-4908"><span class="linenos">4908</span></a> <span class="k">def</span> <span class="nf">_parse_trim</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span>
-</span><span id="Parser-4909"><a href="#Parser-4909"><span class="linenos">4909</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
-</span><span id="Parser-4910"><a href="#Parser-4910"><span class="linenos">4910</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
+</span><span id="Parser-4908"><a href="#Parser-4908"><span class="linenos">4908</span></a> <span class="k">def</span> <span class="nf">_parse_substring</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">:</span>
+</span><span id="Parser-4909"><a href="#Parser-4909"><span class="linenos">4909</span></a> <span class="c1"># Postgres supports the form: substring(string [from int] [for int])</span>
+</span><span id="Parser-4910"><a href="#Parser-4910"><span class="linenos">4910</span></a> <span class="c1"># https://www.postgresql.org/docs/9.1/functions-string.html @ Table 9-6</span>
</span><span id="Parser-4911"><a href="#Parser-4911"><span class="linenos">4911</span></a>
-</span><span id="Parser-4912"><a href="#Parser-4912"><span class="linenos">4912</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4913"><a href="#Parser-4913"><span class="linenos">4913</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4914"><a href="#Parser-4914"><span class="linenos">4914</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4915"><a href="#Parser-4915"><span class="linenos">4915</span></a>
-</span><span id="Parser-4916"><a href="#Parser-4916"><span class="linenos">4916</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRIM_TYPES</span><span class="p">):</span>
-</span><span id="Parser-4917"><a href="#Parser-4917"><span class="linenos">4917</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-4912"><a href="#Parser-4912"><span class="linenos">4912</span></a> <span class="n">args</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]],</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">))</span>
+</span><span id="Parser-4913"><a href="#Parser-4913"><span class="linenos">4913</span></a>
+</span><span id="Parser-4914"><a href="#Parser-4914"><span class="linenos">4914</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">):</span>
+</span><span id="Parser-4915"><a href="#Parser-4915"><span class="linenos">4915</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
+</span><span id="Parser-4916"><a href="#Parser-4916"><span class="linenos">4916</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOR</span><span class="p">):</span>
+</span><span id="Parser-4917"><a href="#Parser-4917"><span class="linenos">4917</span></a> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">())</span>
</span><span id="Parser-4918"><a href="#Parser-4918"><span class="linenos">4918</span></a>
-</span><span id="Parser-4919"><a href="#Parser-4919"><span class="linenos">4919</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-4920"><a href="#Parser-4920"><span class="linenos">4920</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)):</span>
-</span><span id="Parser-4921"><a href="#Parser-4921"><span class="linenos">4921</span></a> <span class="n">invert_order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRIM_PATTERN_FIRST</span>
-</span><span id="Parser-4922"><a href="#Parser-4922"><span class="linenos">4922</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-4923"><a href="#Parser-4923"><span class="linenos">4923</span></a>
-</span><span id="Parser-4924"><a href="#Parser-4924"><span class="linenos">4924</span></a> <span class="k">if</span> <span class="n">invert_order</span><span class="p">:</span>
-</span><span id="Parser-4925"><a href="#Parser-4925"><span class="linenos">4925</span></a> <span class="n">this</span><span class="p">,</span> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="p">,</span> <span class="n">this</span>
-</span><span id="Parser-4926"><a href="#Parser-4926"><span class="linenos">4926</span></a>
-</span><span id="Parser-4927"><a href="#Parser-4927"><span class="linenos">4927</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">):</span>
-</span><span id="Parser-4928"><a href="#Parser-4928"><span class="linenos">4928</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-4929"><a href="#Parser-4929"><span class="linenos">4929</span></a>
-</span><span id="Parser-4930"><a href="#Parser-4930"><span class="linenos">4930</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4931"><a href="#Parser-4931"><span class="linenos">4931</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">collation</span><span class="o">=</span><span class="n">collation</span>
-</span><span id="Parser-4932"><a href="#Parser-4932"><span class="linenos">4932</span></a> <span class="p">)</span>
-</span><span id="Parser-4933"><a href="#Parser-4933"><span class="linenos">4933</span></a>
-</span><span id="Parser-4934"><a href="#Parser-4934"><span class="linenos">4934</span></a> <span class="k">def</span> <span class="nf">_parse_window_clause</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Parser-4935"><a href="#Parser-4935"><span class="linenos">4935</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_named_window</span><span class="p">)</span>
+</span><span id="Parser-4919"><a href="#Parser-4919"><span class="linenos">4919</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">(</span><span class="n">args</span><span class="p">),</span> <span class="n">args</span><span class="p">)</span>
+</span><span id="Parser-4920"><a href="#Parser-4920"><span class="linenos">4920</span></a>
+</span><span id="Parser-4921"><a href="#Parser-4921"><span class="linenos">4921</span></a> <span class="k">def</span> <span class="nf">_parse_trim</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span>
+</span><span id="Parser-4922"><a href="#Parser-4922"><span class="linenos">4922</span></a> <span class="c1"># https://www.w3resource.com/sql/character-functions/trim.php</span>
+</span><span id="Parser-4923"><a href="#Parser-4923"><span class="linenos">4923</span></a> <span class="c1"># https://docs.oracle.com/javadb/10.8.3.0/ref/rreftrimfunc.html</span>
+</span><span id="Parser-4924"><a href="#Parser-4924"><span class="linenos">4924</span></a>
+</span><span id="Parser-4925"><a href="#Parser-4925"><span class="linenos">4925</span></a> <span class="n">position</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4926"><a href="#Parser-4926"><span class="linenos">4926</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4927"><a href="#Parser-4927"><span class="linenos">4927</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-4928"><a href="#Parser-4928"><span class="linenos">4928</span></a>
+</span><span id="Parser-4929"><a href="#Parser-4929"><span class="linenos">4929</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRIM_TYPES</span><span class="p">):</span>
+</span><span id="Parser-4930"><a href="#Parser-4930"><span class="linenos">4930</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-4931"><a href="#Parser-4931"><span class="linenos">4931</span></a>
+</span><span id="Parser-4932"><a href="#Parser-4932"><span class="linenos">4932</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-4933"><a href="#Parser-4933"><span class="linenos">4933</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">)):</span>
+</span><span id="Parser-4934"><a href="#Parser-4934"><span class="linenos">4934</span></a> <span class="n">invert_order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FROM</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRIM_PATTERN_FIRST</span>
+</span><span id="Parser-4935"><a href="#Parser-4935"><span class="linenos">4935</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
</span><span id="Parser-4936"><a href="#Parser-4936"><span class="linenos">4936</span></a>
-</span><span id="Parser-4937"><a href="#Parser-4937"><span class="linenos">4937</span></a> <span class="k">def</span> <span class="nf">_parse_named_window</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4938"><a href="#Parser-4938"><span class="linenos">4938</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span> <span class="n">alias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4937"><a href="#Parser-4937"><span class="linenos">4937</span></a> <span class="k">if</span> <span class="n">invert_order</span><span class="p">:</span>
+</span><span id="Parser-4938"><a href="#Parser-4938"><span class="linenos">4938</span></a> <span class="n">this</span><span class="p">,</span> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="p">,</span> <span class="n">this</span>
</span><span id="Parser-4939"><a href="#Parser-4939"><span class="linenos">4939</span></a>
-</span><span id="Parser-4940"><a href="#Parser-4940"><span class="linenos">4940</span></a> <span class="k">def</span> <span class="nf">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
-</span><span id="Parser-4941"><a href="#Parser-4941"><span class="linenos">4941</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="Parser-4942"><a href="#Parser-4942"><span class="linenos">4942</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4943"><a href="#Parser-4943"><span class="linenos">4943</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="Parser-4944"><a href="#Parser-4944"><span class="linenos">4944</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">IgnoreNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4945"><a href="#Parser-4945"><span class="linenos">4945</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESPECT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
-</span><span id="Parser-4946"><a href="#Parser-4946"><span class="linenos">4946</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4947"><a href="#Parser-4947"><span class="linenos">4947</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4948"><a href="#Parser-4948"><span class="linenos">4948</span></a>
-</span><span id="Parser-4949"><a href="#Parser-4949"><span class="linenos">4949</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
-</span><span id="Parser-4950"><a href="#Parser-4950"><span class="linenos">4950</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-4951"><a href="#Parser-4951"><span class="linenos">4951</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-4952"><a href="#Parser-4952"><span class="linenos">4952</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4953"><a href="#Parser-4953"><span class="linenos">4953</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">)</span>
-</span><span id="Parser-4954"><a href="#Parser-4954"><span class="linenos">4954</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4955"><a href="#Parser-4955"><span class="linenos">4955</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(</span><span class="n">skip_where_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-4956"><a href="#Parser-4956"><span class="linenos">4956</span></a> <span class="p">)</span>
-</span><span id="Parser-4957"><a href="#Parser-4957"><span class="linenos">4957</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-4958"><a href="#Parser-4958"><span class="linenos">4958</span></a>
-</span><span id="Parser-4959"><a href="#Parser-4959"><span class="linenos">4959</span></a> <span class="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
-</span><span id="Parser-4960"><a href="#Parser-4960"><span class="linenos">4960</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/percentile-disc-transact-sql?view=sql-server-ver16</span>
-</span><span id="Parser-4961"><a href="#Parser-4961"><span class="linenos">4961</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
-</span><span id="Parser-4962"><a href="#Parser-4962"><span class="linenos">4962</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">)</span>
-</span><span id="Parser-4963"><a href="#Parser-4963"><span class="linenos">4963</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">order</span><span class="p">)</span>
-</span><span id="Parser-4964"><a href="#Parser-4964"><span class="linenos">4964</span></a>
-</span><span id="Parser-4965"><a href="#Parser-4965"><span class="linenos">4965</span></a> <span class="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
-</span><span id="Parser-4966"><a href="#Parser-4966"><span class="linenos">4966</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
-</span><span id="Parser-4967"><a href="#Parser-4967"><span class="linenos">4967</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
-</span><span id="Parser-4968"><a href="#Parser-4968"><span class="linenos">4968</span></a>
-</span><span id="Parser-4969"><a href="#Parser-4969"><span class="linenos">4969</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
-</span><span id="Parser-4970"><a href="#Parser-4970"><span class="linenos">4970</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</span>
+</span><span id="Parser-4940"><a href="#Parser-4940"><span class="linenos">4940</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">):</span>
+</span><span id="Parser-4941"><a href="#Parser-4941"><span class="linenos">4941</span></a> <span class="n">collation</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-4942"><a href="#Parser-4942"><span class="linenos">4942</span></a>
+</span><span id="Parser-4943"><a href="#Parser-4943"><span class="linenos">4943</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4944"><a href="#Parser-4944"><span class="linenos">4944</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">collation</span><span class="o">=</span><span class="n">collation</span>
+</span><span id="Parser-4945"><a href="#Parser-4945"><span class="linenos">4945</span></a> <span class="p">)</span>
+</span><span id="Parser-4946"><a href="#Parser-4946"><span class="linenos">4946</span></a>
+</span><span id="Parser-4947"><a href="#Parser-4947"><span class="linenos">4947</span></a> <span class="k">def</span> <span class="nf">_parse_window_clause</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-4948"><a href="#Parser-4948"><span class="linenos">4948</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WINDOW</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_named_window</span><span class="p">)</span>
+</span><span id="Parser-4949"><a href="#Parser-4949"><span class="linenos">4949</span></a>
+</span><span id="Parser-4950"><a href="#Parser-4950"><span class="linenos">4950</span></a> <span class="k">def</span> <span class="nf">_parse_named_window</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4951"><a href="#Parser-4951"><span class="linenos">4951</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(),</span> <span class="n">alias</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4952"><a href="#Parser-4952"><span class="linenos">4952</span></a>
+</span><span id="Parser-4953"><a href="#Parser-4953"><span class="linenos">4953</span></a> <span class="k">def</span> <span class="nf">_parse_respect_or_ignore_nulls</span><span class="p">(</span>
+</span><span id="Parser-4954"><a href="#Parser-4954"><span class="linenos">4954</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="Parser-4955"><a href="#Parser-4955"><span class="linenos">4955</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4956"><a href="#Parser-4956"><span class="linenos">4956</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IGNORE&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="Parser-4957"><a href="#Parser-4957"><span class="linenos">4957</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">IgnoreNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4958"><a href="#Parser-4958"><span class="linenos">4958</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;RESPECT&quot;</span><span class="p">,</span> <span class="s2">&quot;NULLS&quot;</span><span class="p">):</span>
+</span><span id="Parser-4959"><a href="#Parser-4959"><span class="linenos">4959</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4960"><a href="#Parser-4960"><span class="linenos">4960</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-4961"><a href="#Parser-4961"><span class="linenos">4961</span></a>
+</span><span id="Parser-4962"><a href="#Parser-4962"><span class="linenos">4962</span></a> <span class="k">def</span> <span class="nf">_parse_window</span><span class="p">(</span>
+</span><span id="Parser-4963"><a href="#Parser-4963"><span class="linenos">4963</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-4964"><a href="#Parser-4964"><span class="linenos">4964</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-4965"><a href="#Parser-4965"><span class="linenos">4965</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FILTER</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-4966"><a href="#Parser-4966"><span class="linenos">4966</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHERE</span><span class="p">)</span>
+</span><span id="Parser-4967"><a href="#Parser-4967"><span class="linenos">4967</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-4968"><a href="#Parser-4968"><span class="linenos">4968</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Filter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_where</span><span class="p">(</span><span class="n">skip_where_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-4969"><a href="#Parser-4969"><span class="linenos">4969</span></a> <span class="p">)</span>
+</span><span id="Parser-4970"><a href="#Parser-4970"><span class="linenos">4970</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
</span><span id="Parser-4971"><a href="#Parser-4971"><span class="linenos">4971</span></a>
-</span><span id="Parser-4972"><a href="#Parser-4972"><span class="linenos">4972</span></a> <span class="c1"># The below changes handle</span>
-</span><span id="Parser-4973"><a href="#Parser-4973"><span class="linenos">4973</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
-</span><span id="Parser-4974"><a href="#Parser-4974"><span class="linenos">4974</span></a>
-</span><span id="Parser-4975"><a href="#Parser-4975"><span class="linenos">4975</span></a> <span class="c1"># Oracle allows both formats</span>
-</span><span id="Parser-4976"><a href="#Parser-4976"><span class="linenos">4976</span></a> <span class="c1"># (https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/img_text/first_value.html)</span>
-</span><span id="Parser-4977"><a href="#Parser-4977"><span class="linenos">4977</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
-</span><span id="Parser-4978"><a href="#Parser-4978"><span class="linenos">4978</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
-</span><span id="Parser-4979"><a href="#Parser-4979"><span class="linenos">4979</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">AggFunc</span><span class="p">):</span>
-</span><span id="Parser-4980"><a href="#Parser-4980"><span class="linenos">4980</span></a> <span class="n">ignore_respect</span> <span class="o">=</span> <span class="n">this</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">IgnoreNulls</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">)</span>
+</span><span id="Parser-4972"><a href="#Parser-4972"><span class="linenos">4972</span></a> <span class="c1"># T-SQL allows the OVER (...) syntax after WITHIN GROUP.</span>
+</span><span id="Parser-4973"><a href="#Parser-4973"><span class="linenos">4973</span></a> <span class="c1"># https://learn.microsoft.com/en-us/sql/t-sql/functions/percentile-disc-transact-sql?view=sql-server-ver16</span>
+</span><span id="Parser-4974"><a href="#Parser-4974"><span class="linenos">4974</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;WITHIN&quot;</span><span class="p">,</span> <span class="s2">&quot;GROUP&quot;</span><span class="p">):</span>
+</span><span id="Parser-4975"><a href="#Parser-4975"><span class="linenos">4975</span></a> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">)</span>
+</span><span id="Parser-4976"><a href="#Parser-4976"><span class="linenos">4976</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">order</span><span class="p">)</span>
+</span><span id="Parser-4977"><a href="#Parser-4977"><span class="linenos">4977</span></a>
+</span><span id="Parser-4978"><a href="#Parser-4978"><span class="linenos">4978</span></a> <span class="c1"># SQL spec defines an optional [ { IGNORE | RESPECT } NULLS ] OVER</span>
+</span><span id="Parser-4979"><a href="#Parser-4979"><span class="linenos">4979</span></a> <span class="c1"># Some dialects choose to implement and some do not.</span>
+</span><span id="Parser-4980"><a href="#Parser-4980"><span class="linenos">4980</span></a> <span class="c1"># https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html</span>
</span><span id="Parser-4981"><a href="#Parser-4981"><span class="linenos">4981</span></a>
-</span><span id="Parser-4982"><a href="#Parser-4982"><span class="linenos">4982</span></a> <span class="k">if</span> <span class="n">ignore_respect</span> <span class="ow">and</span> <span class="n">ignore_respect</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
-</span><span id="Parser-4983"><a href="#Parser-4983"><span class="linenos">4983</span></a> <span class="n">ignore_respect</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4984"><a href="#Parser-4984"><span class="linenos">4984</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
-</span><span id="Parser-4985"><a href="#Parser-4985"><span class="linenos">4985</span></a>
-</span><span id="Parser-4986"><a href="#Parser-4986"><span class="linenos">4986</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4982"><a href="#Parser-4982"><span class="linenos">4982</span></a> <span class="c1"># There is some code above in _parse_lambda that handles</span>
+</span><span id="Parser-4983"><a href="#Parser-4983"><span class="linenos">4983</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN IGNORE|RESPECT NULLS) OVER ...</span>
+</span><span id="Parser-4984"><a href="#Parser-4984"><span class="linenos">4984</span></a>
+</span><span id="Parser-4985"><a href="#Parser-4985"><span class="linenos">4985</span></a> <span class="c1"># The below changes handle</span>
+</span><span id="Parser-4986"><a href="#Parser-4986"><span class="linenos">4986</span></a> <span class="c1"># SELECT FIRST_VALUE(TABLE.COLUMN) IGNORE|RESPECT NULLS OVER ...</span>
</span><span id="Parser-4987"><a href="#Parser-4987"><span class="linenos">4987</span></a>
-</span><span id="Parser-4988"><a href="#Parser-4988"><span class="linenos">4988</span></a> <span class="c1"># bigquery select from window x AS (partition by ...)</span>
-</span><span id="Parser-4989"><a href="#Parser-4989"><span class="linenos">4989</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-4990"><a href="#Parser-4990"><span class="linenos">4990</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-4991"><a href="#Parser-4991"><span class="linenos">4991</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
-</span><span id="Parser-4992"><a href="#Parser-4992"><span class="linenos">4992</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">):</span>
-</span><span id="Parser-4993"><a href="#Parser-4993"><span class="linenos">4993</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-4994"><a href="#Parser-4994"><span class="linenos">4994</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-4995"><a href="#Parser-4995"><span class="linenos">4995</span></a> <span class="n">over</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-4996"><a href="#Parser-4996"><span class="linenos">4996</span></a>
-</span><span id="Parser-4997"><a href="#Parser-4997"><span class="linenos">4997</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-4998"><a href="#Parser-4998"><span class="linenos">4998</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-4999"><a href="#Parser-4999"><span class="linenos">4999</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="kc">False</span><span class="p">),</span> <span class="n">over</span><span class="o">=</span><span class="n">over</span>
-</span><span id="Parser-5000"><a href="#Parser-5000"><span class="linenos">5000</span></a> <span class="p">)</span>
-</span><span id="Parser-5001"><a href="#Parser-5001"><span class="linenos">5001</span></a>
-</span><span id="Parser-5002"><a href="#Parser-5002"><span class="linenos">5002</span></a> <span class="n">window_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_ALIAS_TOKENS</span><span class="p">)</span>
-</span><span id="Parser-5003"><a href="#Parser-5003"><span class="linenos">5003</span></a>
-</span><span id="Parser-5004"><a href="#Parser-5004"><span class="linenos">5004</span></a> <span class="n">first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">)</span>
-</span><span id="Parser-5005"><a href="#Parser-5005"><span class="linenos">5005</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
-</span><span id="Parser-5006"><a href="#Parser-5006"><span class="linenos">5006</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-5007"><a href="#Parser-5007"><span class="linenos">5007</span></a>
-</span><span id="Parser-5008"><a href="#Parser-5008"><span class="linenos">5008</span></a> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_and_order</span><span class="p">()</span>
-</span><span id="Parser-5009"><a href="#Parser-5009"><span class="linenos">5009</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">))</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-5010"><a href="#Parser-5010"><span class="linenos">5010</span></a>
-</span><span id="Parser-5011"><a href="#Parser-5011"><span class="linenos">5011</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
-</span><span id="Parser-5012"><a href="#Parser-5012"><span class="linenos">5012</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)</span>
-</span><span id="Parser-5013"><a href="#Parser-5013"><span class="linenos">5013</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
-</span><span id="Parser-5014"><a href="#Parser-5014"><span class="linenos">5014</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span>
-</span><span id="Parser-5015"><a href="#Parser-5015"><span class="linenos">5015</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
+</span><span id="Parser-4988"><a href="#Parser-4988"><span class="linenos">4988</span></a> <span class="c1"># Oracle allows both formats</span>
+</span><span id="Parser-4989"><a href="#Parser-4989"><span class="linenos">4989</span></a> <span class="c1"># (https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/img_text/first_value.html)</span>
+</span><span id="Parser-4990"><a href="#Parser-4990"><span class="linenos">4990</span></a> <span class="c1"># and Snowflake chose to do the same for familiarity</span>
+</span><span id="Parser-4991"><a href="#Parser-4991"><span class="linenos">4991</span></a> <span class="c1"># https://docs.snowflake.com/en/sql-reference/functions/first_value.html#usage-notes</span>
+</span><span id="Parser-4992"><a href="#Parser-4992"><span class="linenos">4992</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">AggFunc</span><span class="p">):</span>
+</span><span id="Parser-4993"><a href="#Parser-4993"><span class="linenos">4993</span></a> <span class="n">ignore_respect</span> <span class="o">=</span> <span class="n">this</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">IgnoreNulls</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">RespectNulls</span><span class="p">)</span>
+</span><span id="Parser-4994"><a href="#Parser-4994"><span class="linenos">4994</span></a>
+</span><span id="Parser-4995"><a href="#Parser-4995"><span class="linenos">4995</span></a> <span class="k">if</span> <span class="n">ignore_respect</span> <span class="ow">and</span> <span class="n">ignore_respect</span> <span class="ow">is</span> <span class="ow">not</span> <span class="n">this</span><span class="p">:</span>
+</span><span id="Parser-4996"><a href="#Parser-4996"><span class="linenos">4996</span></a> <span class="n">ignore_respect</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4997"><a href="#Parser-4997"><span class="linenos">4997</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">ignore_respect</span><span class="o">.</span><span class="vm">__class__</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-4998"><a href="#Parser-4998"><span class="linenos">4998</span></a>
+</span><span id="Parser-4999"><a href="#Parser-4999"><span class="linenos">4999</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_respect_or_ignore_nulls</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
+</span><span id="Parser-5000"><a href="#Parser-5000"><span class="linenos">5000</span></a>
+</span><span id="Parser-5001"><a href="#Parser-5001"><span class="linenos">5001</span></a> <span class="c1"># bigquery select from window x AS (partition by ...)</span>
+</span><span id="Parser-5002"><a href="#Parser-5002"><span class="linenos">5002</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-5003"><a href="#Parser-5003"><span class="linenos">5003</span></a> <span class="n">over</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5004"><a href="#Parser-5004"><span class="linenos">5004</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
+</span><span id="Parser-5005"><a href="#Parser-5005"><span class="linenos">5005</span></a> <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">):</span>
+</span><span id="Parser-5006"><a href="#Parser-5006"><span class="linenos">5006</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-5007"><a href="#Parser-5007"><span class="linenos">5007</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5008"><a href="#Parser-5008"><span class="linenos">5008</span></a> <span class="n">over</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-5009"><a href="#Parser-5009"><span class="linenos">5009</span></a>
+</span><span id="Parser-5010"><a href="#Parser-5010"><span class="linenos">5010</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-5011"><a href="#Parser-5011"><span class="linenos">5011</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5012"><a href="#Parser-5012"><span class="linenos">5012</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="kc">False</span><span class="p">),</span> <span class="n">over</span><span class="o">=</span><span class="n">over</span>
+</span><span id="Parser-5013"><a href="#Parser-5013"><span class="linenos">5013</span></a> <span class="p">)</span>
+</span><span id="Parser-5014"><a href="#Parser-5014"><span class="linenos">5014</span></a>
+</span><span id="Parser-5015"><a href="#Parser-5015"><span class="linenos">5015</span></a> <span class="n">window_alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">tokens</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_ALIAS_TOKENS</span><span class="p">)</span>
</span><span id="Parser-5016"><a href="#Parser-5016"><span class="linenos">5016</span></a>
-</span><span id="Parser-5017"><a href="#Parser-5017"><span class="linenos">5017</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5018"><a href="#Parser-5018"><span class="linenos">5018</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
-</span><span id="Parser-5019"><a href="#Parser-5019"><span class="linenos">5019</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
-</span><span id="Parser-5020"><a href="#Parser-5020"><span class="linenos">5020</span></a> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
-</span><span id="Parser-5021"><a href="#Parser-5021"><span class="linenos">5021</span></a> <span class="n">start_side</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
-</span><span id="Parser-5022"><a href="#Parser-5022"><span class="linenos">5022</span></a> <span class="n">end</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
-</span><span id="Parser-5023"><a href="#Parser-5023"><span class="linenos">5023</span></a> <span class="n">end_side</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
-</span><span id="Parser-5024"><a href="#Parser-5024"><span class="linenos">5024</span></a> <span class="p">)</span>
-</span><span id="Parser-5025"><a href="#Parser-5025"><span class="linenos">5025</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5026"><a href="#Parser-5026"><span class="linenos">5026</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5027"><a href="#Parser-5027"><span class="linenos">5027</span></a>
-</span><span id="Parser-5028"><a href="#Parser-5028"><span class="linenos">5028</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-5017"><a href="#Parser-5017"><span class="linenos">5017</span></a> <span class="n">first</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FIRST</span><span class="p">)</span>
+</span><span id="Parser-5018"><a href="#Parser-5018"><span class="linenos">5018</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;LAST&quot;</span><span class="p">):</span>
+</span><span id="Parser-5019"><a href="#Parser-5019"><span class="linenos">5019</span></a> <span class="n">first</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-5020"><a href="#Parser-5020"><span class="linenos">5020</span></a>
+</span><span id="Parser-5021"><a href="#Parser-5021"><span class="linenos">5021</span></a> <span class="n">partition</span><span class="p">,</span> <span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_and_order</span><span class="p">()</span>
+</span><span id="Parser-5022"><a href="#Parser-5022"><span class="linenos">5022</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ROWS</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RANGE</span><span class="p">))</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
+</span><span id="Parser-5023"><a href="#Parser-5023"><span class="linenos">5023</span></a>
+</span><span id="Parser-5024"><a href="#Parser-5024"><span class="linenos">5024</span></a> <span class="k">if</span> <span class="n">kind</span><span class="p">:</span>
+</span><span id="Parser-5025"><a href="#Parser-5025"><span class="linenos">5025</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)</span>
+</span><span id="Parser-5026"><a href="#Parser-5026"><span class="linenos">5026</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
+</span><span id="Parser-5027"><a href="#Parser-5027"><span class="linenos">5027</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span>
+</span><span id="Parser-5028"><a href="#Parser-5028"><span class="linenos">5028</span></a> <span class="n">end</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window_spec</span><span class="p">()</span>
</span><span id="Parser-5029"><a href="#Parser-5029"><span class="linenos">5029</span></a>
-</span><span id="Parser-5030"><a href="#Parser-5030"><span class="linenos">5030</span></a> <span class="n">window</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5031"><a href="#Parser-5031"><span class="linenos">5031</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
-</span><span id="Parser-5032"><a href="#Parser-5032"><span class="linenos">5032</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-5033"><a href="#Parser-5033"><span class="linenos">5033</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
-</span><span id="Parser-5034"><a href="#Parser-5034"><span class="linenos">5034</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
-</span><span id="Parser-5035"><a href="#Parser-5035"><span class="linenos">5035</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
-</span><span id="Parser-5036"><a href="#Parser-5036"><span class="linenos">5036</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">window_alias</span><span class="p">,</span>
-</span><span id="Parser-5037"><a href="#Parser-5037"><span class="linenos">5037</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
-</span><span id="Parser-5038"><a href="#Parser-5038"><span class="linenos">5038</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
-</span><span id="Parser-5039"><a href="#Parser-5039"><span class="linenos">5039</span></a> <span class="p">)</span>
+</span><span id="Parser-5030"><a href="#Parser-5030"><span class="linenos">5030</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5031"><a href="#Parser-5031"><span class="linenos">5031</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WindowSpec</span><span class="p">,</span>
+</span><span id="Parser-5032"><a href="#Parser-5032"><span class="linenos">5032</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">,</span>
+</span><span id="Parser-5033"><a href="#Parser-5033"><span class="linenos">5033</span></a> <span class="n">start</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
+</span><span id="Parser-5034"><a href="#Parser-5034"><span class="linenos">5034</span></a> <span class="n">start_side</span><span class="o">=</span><span class="n">start</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
+</span><span id="Parser-5035"><a href="#Parser-5035"><span class="linenos">5035</span></a> <span class="n">end</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;value&quot;</span><span class="p">],</span>
+</span><span id="Parser-5036"><a href="#Parser-5036"><span class="linenos">5036</span></a> <span class="n">end_side</span><span class="o">=</span><span class="n">end</span><span class="p">[</span><span class="s2">&quot;side&quot;</span><span class="p">],</span>
+</span><span id="Parser-5037"><a href="#Parser-5037"><span class="linenos">5037</span></a> <span class="p">)</span>
+</span><span id="Parser-5038"><a href="#Parser-5038"><span class="linenos">5038</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5039"><a href="#Parser-5039"><span class="linenos">5039</span></a> <span class="n">spec</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5040"><a href="#Parser-5040"><span class="linenos">5040</span></a>
-</span><span id="Parser-5041"><a href="#Parser-5041"><span class="linenos">5041</span></a> <span class="c1"># This covers Oracle&#39;s FIRST/LAST syntax: aggregate KEEP (...) OVER (...)</span>
-</span><span id="Parser-5042"><a href="#Parser-5042"><span class="linenos">5042</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-5043"><a href="#Parser-5043"><span class="linenos">5043</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="Parser-5044"><a href="#Parser-5044"><span class="linenos">5044</span></a>
-</span><span id="Parser-5045"><a href="#Parser-5045"><span class="linenos">5045</span></a> <span class="k">return</span> <span class="n">window</span>
-</span><span id="Parser-5046"><a href="#Parser-5046"><span class="linenos">5046</span></a>
-</span><span id="Parser-5047"><a href="#Parser-5047"><span class="linenos">5047</span></a> <span class="k">def</span> <span class="nf">_parse_partition_and_order</span><span class="p">(</span>
-</span><span id="Parser-5048"><a href="#Parser-5048"><span class="linenos">5048</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-5049"><a href="#Parser-5049"><span class="linenos">5049</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Parser-5050"><a href="#Parser-5050"><span class="linenos">5050</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
-</span><span id="Parser-5051"><a href="#Parser-5051"><span class="linenos">5051</span></a>
-</span><span id="Parser-5052"><a href="#Parser-5052"><span class="linenos">5052</span></a> <span class="k">def</span> <span class="nf">_parse_window_spec</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Parser-5053"><a href="#Parser-5053"><span class="linenos">5053</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)</span>
-</span><span id="Parser-5054"><a href="#Parser-5054"><span class="linenos">5054</span></a>
-</span><span id="Parser-5055"><a href="#Parser-5055"><span class="linenos">5055</span></a> <span class="k">return</span> <span class="p">{</span>
-</span><span id="Parser-5056"><a href="#Parser-5056"><span class="linenos">5056</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
-</span><span id="Parser-5057"><a href="#Parser-5057"><span class="linenos">5057</span></a> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span>
-</span><span id="Parser-5058"><a href="#Parser-5058"><span class="linenos">5058</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CURRENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">)</span>
-</span><span id="Parser-5059"><a href="#Parser-5059"><span class="linenos">5059</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
-</span><span id="Parser-5060"><a href="#Parser-5060"><span class="linenos">5060</span></a> <span class="p">),</span>
-</span><span id="Parser-5061"><a href="#Parser-5061"><span class="linenos">5061</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
-</span><span id="Parser-5062"><a href="#Parser-5062"><span class="linenos">5062</span></a> <span class="p">}</span>
-</span><span id="Parser-5063"><a href="#Parser-5063"><span class="linenos">5063</span></a>
-</span><span id="Parser-5064"><a href="#Parser-5064"><span class="linenos">5064</span></a> <span class="k">def</span> <span class="nf">_parse_alias</span><span class="p">(</span>
-</span><span id="Parser-5065"><a href="#Parser-5065"><span class="linenos">5065</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">explicit</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-5066"><a href="#Parser-5066"><span class="linenos">5066</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5067"><a href="#Parser-5067"><span class="linenos">5067</span></a> <span class="n">any_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
-</span><span id="Parser-5068"><a href="#Parser-5068"><span class="linenos">5068</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
-</span><span id="Parser-5069"><a href="#Parser-5069"><span class="linenos">5069</span></a>
-</span><span id="Parser-5070"><a href="#Parser-5070"><span class="linenos">5070</span></a> <span class="k">if</span> <span class="n">explicit</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">any_token</span><span class="p">:</span>
-</span><span id="Parser-5071"><a href="#Parser-5071"><span class="linenos">5071</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-5072"><a href="#Parser-5072"><span class="linenos">5072</span></a>
-</span><span id="Parser-5073"><a href="#Parser-5073"><span class="linenos">5073</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-5074"><a href="#Parser-5074"><span class="linenos">5074</span></a> <span class="n">aliases</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5075"><a href="#Parser-5075"><span class="linenos">5075</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
-</span><span id="Parser-5076"><a href="#Parser-5076"><span class="linenos">5076</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
-</span><span id="Parser-5077"><a href="#Parser-5077"><span class="linenos">5077</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-5078"><a href="#Parser-5078"><span class="linenos">5078</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="p">)),</span>
-</span><span id="Parser-5079"><a href="#Parser-5079"><span class="linenos">5079</span></a> <span class="p">)</span>
-</span><span id="Parser-5080"><a href="#Parser-5080"><span class="linenos">5080</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span>
-</span><span id="Parser-5081"><a href="#Parser-5081"><span class="linenos">5081</span></a> <span class="k">return</span> <span class="n">aliases</span>
+</span><span id="Parser-5041"><a href="#Parser-5041"><span class="linenos">5041</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-5042"><a href="#Parser-5042"><span class="linenos">5042</span></a>
+</span><span id="Parser-5043"><a href="#Parser-5043"><span class="linenos">5043</span></a> <span class="n">window</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5044"><a href="#Parser-5044"><span class="linenos">5044</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Window</span><span class="p">,</span>
+</span><span id="Parser-5045"><a href="#Parser-5045"><span class="linenos">5045</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-5046"><a href="#Parser-5046"><span class="linenos">5046</span></a> <span class="n">partition_by</span><span class="o">=</span><span class="n">partition</span><span class="p">,</span>
+</span><span id="Parser-5047"><a href="#Parser-5047"><span class="linenos">5047</span></a> <span class="n">order</span><span class="o">=</span><span class="n">order</span><span class="p">,</span>
+</span><span id="Parser-5048"><a href="#Parser-5048"><span class="linenos">5048</span></a> <span class="n">spec</span><span class="o">=</span><span class="n">spec</span><span class="p">,</span>
+</span><span id="Parser-5049"><a href="#Parser-5049"><span class="linenos">5049</span></a> <span class="n">alias</span><span class="o">=</span><span class="n">window_alias</span><span class="p">,</span>
+</span><span id="Parser-5050"><a href="#Parser-5050"><span class="linenos">5050</span></a> <span class="n">over</span><span class="o">=</span><span class="n">over</span><span class="p">,</span>
+</span><span id="Parser-5051"><a href="#Parser-5051"><span class="linenos">5051</span></a> <span class="n">first</span><span class="o">=</span><span class="n">first</span><span class="p">,</span>
+</span><span id="Parser-5052"><a href="#Parser-5052"><span class="linenos">5052</span></a> <span class="p">)</span>
+</span><span id="Parser-5053"><a href="#Parser-5053"><span class="linenos">5053</span></a>
+</span><span id="Parser-5054"><a href="#Parser-5054"><span class="linenos">5054</span></a> <span class="c1"># This covers Oracle&#39;s FIRST/LAST syntax: aggregate KEEP (...) OVER (...)</span>
+</span><span id="Parser-5055"><a href="#Parser-5055"><span class="linenos">5055</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_BEFORE_PAREN_TOKENS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-5056"><a href="#Parser-5056"><span class="linenos">5056</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_window</span><span class="p">(</span><span class="n">window</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="Parser-5057"><a href="#Parser-5057"><span class="linenos">5057</span></a>
+</span><span id="Parser-5058"><a href="#Parser-5058"><span class="linenos">5058</span></a> <span class="k">return</span> <span class="n">window</span>
+</span><span id="Parser-5059"><a href="#Parser-5059"><span class="linenos">5059</span></a>
+</span><span id="Parser-5060"><a href="#Parser-5060"><span class="linenos">5060</span></a> <span class="k">def</span> <span class="nf">_parse_partition_and_order</span><span class="p">(</span>
+</span><span id="Parser-5061"><a href="#Parser-5061"><span class="linenos">5061</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-5062"><a href="#Parser-5062"><span class="linenos">5062</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Tuple</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-5063"><a href="#Parser-5063"><span class="linenos">5063</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition_by</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order</span><span class="p">()</span>
+</span><span id="Parser-5064"><a href="#Parser-5064"><span class="linenos">5064</span></a>
+</span><span id="Parser-5065"><a href="#Parser-5065"><span class="linenos">5065</span></a> <span class="k">def</span> <span class="nf">_parse_window_spec</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-5066"><a href="#Parser-5066"><span class="linenos">5066</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">BETWEEN</span><span class="p">)</span>
+</span><span id="Parser-5067"><a href="#Parser-5067"><span class="linenos">5067</span></a>
+</span><span id="Parser-5068"><a href="#Parser-5068"><span class="linenos">5068</span></a> <span class="k">return</span> <span class="p">{</span>
+</span><span id="Parser-5069"><a href="#Parser-5069"><span class="linenos">5069</span></a> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">(</span>
+</span><span id="Parser-5070"><a href="#Parser-5070"><span class="linenos">5070</span></a> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;UNBOUNDED&quot;</span><span class="p">)</span>
+</span><span id="Parser-5071"><a href="#Parser-5071"><span class="linenos">5071</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CURRENT&quot;</span><span class="p">,</span> <span class="s2">&quot;ROW&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="s2">&quot;CURRENT ROW&quot;</span><span class="p">)</span>
+</span><span id="Parser-5072"><a href="#Parser-5072"><span class="linenos">5072</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_bitwise</span><span class="p">()</span>
+</span><span id="Parser-5073"><a href="#Parser-5073"><span class="linenos">5073</span></a> <span class="p">),</span>
+</span><span id="Parser-5074"><a href="#Parser-5074"><span class="linenos">5074</span></a> <span class="s2">&quot;side&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">WINDOW_SIDES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
+</span><span id="Parser-5075"><a href="#Parser-5075"><span class="linenos">5075</span></a> <span class="p">}</span>
+</span><span id="Parser-5076"><a href="#Parser-5076"><span class="linenos">5076</span></a>
+</span><span id="Parser-5077"><a href="#Parser-5077"><span class="linenos">5077</span></a> <span class="k">def</span> <span class="nf">_parse_alias</span><span class="p">(</span>
+</span><span id="Parser-5078"><a href="#Parser-5078"><span class="linenos">5078</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">explicit</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-5079"><a href="#Parser-5079"><span class="linenos">5079</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5080"><a href="#Parser-5080"><span class="linenos">5080</span></a> <span class="n">any_token</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">)</span>
+</span><span id="Parser-5081"><a href="#Parser-5081"><span class="linenos">5081</span></a> <span class="n">comments</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span>
</span><span id="Parser-5082"><a href="#Parser-5082"><span class="linenos">5082</span></a>
-</span><span id="Parser-5083"><a href="#Parser-5083"><span class="linenos">5083</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
-</span><span id="Parser-5084"><a href="#Parser-5084"><span class="linenos">5084</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ALIASES</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
-</span><span id="Parser-5085"><a href="#Parser-5085"><span class="linenos">5085</span></a> <span class="p">)</span>
-</span><span id="Parser-5086"><a href="#Parser-5086"><span class="linenos">5086</span></a>
-</span><span id="Parser-5087"><a href="#Parser-5087"><span class="linenos">5087</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
-</span><span id="Parser-5088"><a href="#Parser-5088"><span class="linenos">5088</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
-</span><span id="Parser-5089"><a href="#Parser-5089"><span class="linenos">5089</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Parser-5090"><a href="#Parser-5090"><span class="linenos">5090</span></a>
-</span><span id="Parser-5091"><a href="#Parser-5091"><span class="linenos">5091</span></a> <span class="c1"># Moves the comment next to the alias in `expr /* comment */ AS alias`</span>
-</span><span id="Parser-5092"><a href="#Parser-5092"><span class="linenos">5092</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">column</span> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span><span class="p">:</span>
-</span><span id="Parser-5093"><a href="#Parser-5093"><span class="linenos">5093</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span>
-</span><span id="Parser-5094"><a href="#Parser-5094"><span class="linenos">5094</span></a> <span class="n">column</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5083"><a href="#Parser-5083"><span class="linenos">5083</span></a> <span class="k">if</span> <span class="n">explicit</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">any_token</span><span class="p">:</span>
+</span><span id="Parser-5084"><a href="#Parser-5084"><span class="linenos">5084</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-5085"><a href="#Parser-5085"><span class="linenos">5085</span></a>
+</span><span id="Parser-5086"><a href="#Parser-5086"><span class="linenos">5086</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-5087"><a href="#Parser-5087"><span class="linenos">5087</span></a> <span class="n">aliases</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5088"><a href="#Parser-5088"><span class="linenos">5088</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Aliases</span><span class="p">,</span>
+</span><span id="Parser-5089"><a href="#Parser-5089"><span class="linenos">5089</span></a> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span>
+</span><span id="Parser-5090"><a href="#Parser-5090"><span class="linenos">5090</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-5091"><a href="#Parser-5091"><span class="linenos">5091</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="p">)),</span>
+</span><span id="Parser-5092"><a href="#Parser-5092"><span class="linenos">5092</span></a> <span class="p">)</span>
+</span><span id="Parser-5093"><a href="#Parser-5093"><span class="linenos">5093</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span>
+</span><span id="Parser-5094"><a href="#Parser-5094"><span class="linenos">5094</span></a> <span class="k">return</span> <span class="n">aliases</span>
</span><span id="Parser-5095"><a href="#Parser-5095"><span class="linenos">5095</span></a>
-</span><span id="Parser-5096"><a href="#Parser-5096"><span class="linenos">5096</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-5097"><a href="#Parser-5097"><span class="linenos">5097</span></a>
-</span><span id="Parser-5098"><a href="#Parser-5098"><span class="linenos">5098</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
-</span><span id="Parser-5099"><a href="#Parser-5099"><span class="linenos">5099</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-5100"><a href="#Parser-5100"><span class="linenos">5100</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="Parser-5101"><a href="#Parser-5101"><span class="linenos">5101</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-5102"><a href="#Parser-5102"><span class="linenos">5102</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5103"><a href="#Parser-5103"><span class="linenos">5103</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span>
-</span><span id="Parser-5104"><a href="#Parser-5104"><span class="linenos">5104</span></a>
-</span><span id="Parser-5105"><a href="#Parser-5105"><span class="linenos">5105</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
-</span><span id="Parser-5106"><a href="#Parser-5106"><span class="linenos">5106</span></a> <span class="k">return</span> <span class="n">identifier</span>
-</span><span id="Parser-5107"><a href="#Parser-5107"><span class="linenos">5107</span></a>
-</span><span id="Parser-5108"><a href="#Parser-5108"><span class="linenos">5108</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span><span class="p">):</span>
-</span><span id="Parser-5109"><a href="#Parser-5109"><span class="linenos">5109</span></a> <span class="n">quoted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
-</span><span id="Parser-5110"><a href="#Parser-5110"><span class="linenos">5110</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">quoted</span><span class="p">)</span>
-</span><span id="Parser-5111"><a href="#Parser-5111"><span class="linenos">5111</span></a>
-</span><span id="Parser-5112"><a href="#Parser-5112"><span class="linenos">5112</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5113"><a href="#Parser-5113"><span class="linenos">5113</span></a>
-</span><span id="Parser-5114"><a href="#Parser-5114"><span class="linenos">5114</span></a> <span class="k">def</span> <span class="nf">_parse_string</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5115"><a href="#Parser-5115"><span class="linenos">5115</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RAW_STRING</span><span class="p">)):</span>
-</span><span id="Parser-5116"><a href="#Parser-5116"><span class="linenos">5116</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5117"><a href="#Parser-5117"><span class="linenos">5117</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="Parser-5118"><a href="#Parser-5118"><span class="linenos">5118</span></a>
-</span><span id="Parser-5119"><a href="#Parser-5119"><span class="linenos">5119</span></a> <span class="k">def</span> <span class="nf">_parse_string_as_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]:</span>
-</span><span id="Parser-5120"><a href="#Parser-5120"><span class="linenos">5120</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-5121"><a href="#Parser-5121"><span class="linenos">5121</span></a>
-</span><span id="Parser-5122"><a href="#Parser-5122"><span class="linenos">5122</span></a> <span class="k">def</span> <span class="nf">_parse_number</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5123"><a href="#Parser-5123"><span class="linenos">5123</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">):</span>
-</span><span id="Parser-5124"><a href="#Parser-5124"><span class="linenos">5124</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5125"><a href="#Parser-5125"><span class="linenos">5125</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-5096"><a href="#Parser-5096"><span class="linenos">5096</span></a> <span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">(</span><span class="n">any_token</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span>
+</span><span id="Parser-5097"><a href="#Parser-5097"><span class="linenos">5097</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">STRING_ALIASES</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string_as_identifier</span><span class="p">()</span>
+</span><span id="Parser-5098"><a href="#Parser-5098"><span class="linenos">5098</span></a> <span class="p">)</span>
+</span><span id="Parser-5099"><a href="#Parser-5099"><span class="linenos">5099</span></a>
+</span><span id="Parser-5100"><a href="#Parser-5100"><span class="linenos">5100</span></a> <span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
+</span><span id="Parser-5101"><a href="#Parser-5101"><span class="linenos">5101</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Alias</span><span class="p">,</span> <span class="n">comments</span><span class="o">=</span><span class="n">comments</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
+</span><span id="Parser-5102"><a href="#Parser-5102"><span class="linenos">5102</span></a> <span class="n">column</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Parser-5103"><a href="#Parser-5103"><span class="linenos">5103</span></a>
+</span><span id="Parser-5104"><a href="#Parser-5104"><span class="linenos">5104</span></a> <span class="c1"># Moves the comment next to the alias in `expr /* comment */ AS alias`</span>
+</span><span id="Parser-5105"><a href="#Parser-5105"><span class="linenos">5105</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="ow">and</span> <span class="n">column</span> <span class="ow">and</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span><span class="p">:</span>
+</span><span id="Parser-5106"><a href="#Parser-5106"><span class="linenos">5106</span></a> <span class="n">this</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">comments</span>
+</span><span id="Parser-5107"><a href="#Parser-5107"><span class="linenos">5107</span></a> <span class="n">column</span><span class="o">.</span><span class="n">comments</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5108"><a href="#Parser-5108"><span class="linenos">5108</span></a>
+</span><span id="Parser-5109"><a href="#Parser-5109"><span class="linenos">5109</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-5110"><a href="#Parser-5110"><span class="linenos">5110</span></a>
+</span><span id="Parser-5111"><a href="#Parser-5111"><span class="linenos">5111</span></a> <span class="k">def</span> <span class="nf">_parse_id_var</span><span class="p">(</span>
+</span><span id="Parser-5112"><a href="#Parser-5112"><span class="linenos">5112</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-5113"><a href="#Parser-5113"><span class="linenos">5113</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="Parser-5114"><a href="#Parser-5114"><span class="linenos">5114</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-5115"><a href="#Parser-5115"><span class="linenos">5115</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5116"><a href="#Parser-5116"><span class="linenos">5116</span></a> <span class="n">identifier</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span>
+</span><span id="Parser-5117"><a href="#Parser-5117"><span class="linenos">5117</span></a>
+</span><span id="Parser-5118"><a href="#Parser-5118"><span class="linenos">5118</span></a> <span class="k">if</span> <span class="n">identifier</span><span class="p">:</span>
+</span><span id="Parser-5119"><a href="#Parser-5119"><span class="linenos">5119</span></a> <span class="k">return</span> <span class="n">identifier</span>
+</span><span id="Parser-5120"><a href="#Parser-5120"><span class="linenos">5120</span></a>
+</span><span id="Parser-5121"><a href="#Parser-5121"><span class="linenos">5121</span></a> <span class="k">if</span> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">ID_VAR_TOKENS</span><span class="p">):</span>
+</span><span id="Parser-5122"><a href="#Parser-5122"><span class="linenos">5122</span></a> <span class="n">quoted</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span>
+</span><span id="Parser-5123"><a href="#Parser-5123"><span class="linenos">5123</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="n">quoted</span><span class="p">)</span>
+</span><span id="Parser-5124"><a href="#Parser-5124"><span class="linenos">5124</span></a>
+</span><span id="Parser-5125"><a href="#Parser-5125"><span class="linenos">5125</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5126"><a href="#Parser-5126"><span class="linenos">5126</span></a>
-</span><span id="Parser-5127"><a href="#Parser-5127"><span class="linenos">5127</span></a> <span class="k">def</span> <span class="nf">_parse_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5128"><a href="#Parser-5128"><span class="linenos">5128</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">):</span>
-</span><span id="Parser-5129"><a href="#Parser-5129"><span class="linenos">5129</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5127"><a href="#Parser-5127"><span class="linenos">5127</span></a> <span class="k">def</span> <span class="nf">_parse_string</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5128"><a href="#Parser-5128"><span class="linenos">5128</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">((</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">RAW_STRING</span><span class="p">)):</span>
+</span><span id="Parser-5129"><a href="#Parser-5129"><span class="linenos">5129</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
</span><span id="Parser-5130"><a href="#Parser-5130"><span class="linenos">5130</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="Parser-5131"><a href="#Parser-5131"><span class="linenos">5131</span></a>
-</span><span id="Parser-5132"><a href="#Parser-5132"><span class="linenos">5132</span></a> <span class="k">def</span> <span class="nf">_parse_var</span><span class="p">(</span>
-</span><span id="Parser-5133"><a href="#Parser-5133"><span class="linenos">5133</span></a> <span class="bp">self</span><span class="p">,</span>
-</span><span id="Parser-5134"><a href="#Parser-5134"><span class="linenos">5134</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-5135"><a href="#Parser-5135"><span class="linenos">5135</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-5136"><a href="#Parser-5136"><span class="linenos">5136</span></a> <span class="n">upper</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="Parser-5137"><a href="#Parser-5137"><span class="linenos">5137</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5138"><a href="#Parser-5138"><span class="linenos">5138</span></a> <span class="k">if</span> <span class="p">(</span>
-</span><span id="Parser-5139"><a href="#Parser-5139"><span class="linenos">5139</span></a> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span>
-</span><span id="Parser-5140"><a href="#Parser-5140"><span class="linenos">5140</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
-</span><span id="Parser-5141"><a href="#Parser-5141"><span class="linenos">5141</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="k">if</span> <span class="n">tokens</span> <span class="k">else</span> <span class="kc">False</span><span class="p">)</span>
-</span><span id="Parser-5142"><a href="#Parser-5142"><span class="linenos">5142</span></a> <span class="p">):</span>
-</span><span id="Parser-5143"><a href="#Parser-5143"><span class="linenos">5143</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5144"><a href="#Parser-5144"><span class="linenos">5144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">upper</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-5145"><a href="#Parser-5145"><span class="linenos">5145</span></a> <span class="p">)</span>
-</span><span id="Parser-5146"><a href="#Parser-5146"><span class="linenos">5146</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="Parser-5147"><a href="#Parser-5147"><span class="linenos">5147</span></a>
-</span><span id="Parser-5148"><a href="#Parser-5148"><span class="linenos">5148</span></a> <span class="k">def</span> <span class="nf">_advance_any</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ignore_reserved</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
-</span><span id="Parser-5149"><a href="#Parser-5149"><span class="linenos">5149</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="p">(</span><span class="n">ignore_reserved</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_TOKENS</span><span class="p">):</span>
-</span><span id="Parser-5150"><a href="#Parser-5150"><span class="linenos">5150</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5151"><a href="#Parser-5151"><span class="linenos">5151</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="Parser-5152"><a href="#Parser-5152"><span class="linenos">5152</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5153"><a href="#Parser-5153"><span class="linenos">5153</span></a>
-</span><span id="Parser-5154"><a href="#Parser-5154"><span class="linenos">5154</span></a> <span class="k">def</span> <span class="nf">_parse_var_or_string</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5155"><a href="#Parser-5155"><span class="linenos">5155</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
-</span><span id="Parser-5156"><a href="#Parser-5156"><span class="linenos">5156</span></a>
-</span><span id="Parser-5157"><a href="#Parser-5157"><span class="linenos">5157</span></a> <span class="k">def</span> <span class="nf">_parse_null</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5158"><a href="#Parser-5158"><span class="linenos">5158</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NULL_TOKENS</span><span class="p">):</span>
-</span><span id="Parser-5159"><a href="#Parser-5159"><span class="linenos">5159</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5160"><a href="#Parser-5160"><span class="linenos">5160</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="Parser-5161"><a href="#Parser-5161"><span class="linenos">5161</span></a>
-</span><span id="Parser-5162"><a href="#Parser-5162"><span class="linenos">5162</span></a> <span class="k">def</span> <span class="nf">_parse_boolean</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5163"><a href="#Parser-5163"><span class="linenos">5163</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">):</span>
-</span><span id="Parser-5164"><a href="#Parser-5164"><span class="linenos">5164</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5165"><a href="#Parser-5165"><span class="linenos">5165</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">):</span>
-</span><span id="Parser-5166"><a href="#Parser-5166"><span class="linenos">5166</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5167"><a href="#Parser-5167"><span class="linenos">5167</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="Parser-5168"><a href="#Parser-5168"><span class="linenos">5168</span></a>
-</span><span id="Parser-5169"><a href="#Parser-5169"><span class="linenos">5169</span></a> <span class="k">def</span> <span class="nf">_parse_star</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5170"><a href="#Parser-5170"><span class="linenos">5170</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">):</span>
-</span><span id="Parser-5171"><a href="#Parser-5171"><span class="linenos">5171</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5172"><a href="#Parser-5172"><span class="linenos">5172</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
-</span><span id="Parser-5173"><a href="#Parser-5173"><span class="linenos">5173</span></a>
-</span><span id="Parser-5174"><a href="#Parser-5174"><span class="linenos">5174</span></a> <span class="k">def</span> <span class="nf">_parse_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Parameter</span><span class="p">:</span>
-</span><span id="Parser-5175"><a href="#Parser-5175"><span class="linenos">5175</span></a> <span class="k">def</span> <span class="nf">_parse_parameter_part</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5176"><a href="#Parser-5176"><span class="linenos">5176</span></a> <span class="k">return</span> <span class="p">(</span>
-</span><span id="Parser-5177"><a href="#Parser-5177"><span class="linenos">5177</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-5178"><a href="#Parser-5178"><span class="linenos">5178</span></a> <span class="p">)</span>
-</span><span id="Parser-5179"><a href="#Parser-5179"><span class="linenos">5179</span></a>
-</span><span id="Parser-5180"><a href="#Parser-5180"><span class="linenos">5180</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)</span>
-</span><span id="Parser-5181"><a href="#Parser-5181"><span class="linenos">5181</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
-</span><span id="Parser-5182"><a href="#Parser-5182"><span class="linenos">5182</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
-</span><span id="Parser-5183"><a href="#Parser-5183"><span class="linenos">5183</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">)</span>
-</span><span id="Parser-5184"><a href="#Parser-5184"><span class="linenos">5184</span></a>
-</span><span id="Parser-5185"><a href="#Parser-5185"><span class="linenos">5185</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Parameter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Parser-5132"><a href="#Parser-5132"><span class="linenos">5132</span></a> <span class="k">def</span> <span class="nf">_parse_string_as_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">]:</span>
+</span><span id="Parser-5133"><a href="#Parser-5133"><span class="linenos">5133</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STRING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5134"><a href="#Parser-5134"><span class="linenos">5134</span></a>
+</span><span id="Parser-5135"><a href="#Parser-5135"><span class="linenos">5135</span></a> <span class="k">def</span> <span class="nf">_parse_number</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5136"><a href="#Parser-5136"><span class="linenos">5136</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">):</span>
+</span><span id="Parser-5137"><a href="#Parser-5137"><span class="linenos">5137</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NUMBER</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5138"><a href="#Parser-5138"><span class="linenos">5138</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-5139"><a href="#Parser-5139"><span class="linenos">5139</span></a>
+</span><span id="Parser-5140"><a href="#Parser-5140"><span class="linenos">5140</span></a> <span class="k">def</span> <span class="nf">_parse_identifier</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5141"><a href="#Parser-5141"><span class="linenos">5141</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IDENTIFIER</span><span class="p">):</span>
+</span><span id="Parser-5142"><a href="#Parser-5142"><span class="linenos">5142</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Identifier</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">,</span> <span class="n">quoted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5143"><a href="#Parser-5143"><span class="linenos">5143</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-5144"><a href="#Parser-5144"><span class="linenos">5144</span></a>
+</span><span id="Parser-5145"><a href="#Parser-5145"><span class="linenos">5145</span></a> <span class="k">def</span> <span class="nf">_parse_var</span><span class="p">(</span>
+</span><span id="Parser-5146"><a href="#Parser-5146"><span class="linenos">5146</span></a> <span class="bp">self</span><span class="p">,</span>
+</span><span id="Parser-5147"><a href="#Parser-5147"><span class="linenos">5147</span></a> <span class="n">any_token</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-5148"><a href="#Parser-5148"><span class="linenos">5148</span></a> <span class="n">tokens</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="n">TokenType</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-5149"><a href="#Parser-5149"><span class="linenos">5149</span></a> <span class="n">upper</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="Parser-5150"><a href="#Parser-5150"><span class="linenos">5150</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5151"><a href="#Parser-5151"><span class="linenos">5151</span></a> <span class="k">if</span> <span class="p">(</span>
+</span><span id="Parser-5152"><a href="#Parser-5152"><span class="linenos">5152</span></a> <span class="p">(</span><span class="n">any_token</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_advance_any</span><span class="p">())</span>
+</span><span id="Parser-5153"><a href="#Parser-5153"><span class="linenos">5153</span></a> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">)</span>
+</span><span id="Parser-5154"><a href="#Parser-5154"><span class="linenos">5154</span></a> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">tokens</span><span class="p">)</span> <span class="k">if</span> <span class="n">tokens</span> <span class="k">else</span> <span class="kc">False</span><span class="p">)</span>
+</span><span id="Parser-5155"><a href="#Parser-5155"><span class="linenos">5155</span></a> <span class="p">):</span>
+</span><span id="Parser-5156"><a href="#Parser-5156"><span class="linenos">5156</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5157"><a href="#Parser-5157"><span class="linenos">5157</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">if</span> <span class="n">upper</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
+</span><span id="Parser-5158"><a href="#Parser-5158"><span class="linenos">5158</span></a> <span class="p">)</span>
+</span><span id="Parser-5159"><a href="#Parser-5159"><span class="linenos">5159</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-5160"><a href="#Parser-5160"><span class="linenos">5160</span></a>
+</span><span id="Parser-5161"><a href="#Parser-5161"><span class="linenos">5161</span></a> <span class="k">def</span> <span class="nf">_advance_any</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ignore_reserved</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">Token</span><span class="p">]:</span>
+</span><span id="Parser-5162"><a href="#Parser-5162"><span class="linenos">5162</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="p">(</span><span class="n">ignore_reserved</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">RESERVED_TOKENS</span><span class="p">):</span>
+</span><span id="Parser-5163"><a href="#Parser-5163"><span class="linenos">5163</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5164"><a href="#Parser-5164"><span class="linenos">5164</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="Parser-5165"><a href="#Parser-5165"><span class="linenos">5165</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5166"><a href="#Parser-5166"><span class="linenos">5166</span></a>
+</span><span id="Parser-5167"><a href="#Parser-5167"><span class="linenos">5167</span></a> <span class="k">def</span> <span class="nf">_parse_var_or_string</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5168"><a href="#Parser-5168"><span class="linenos">5168</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span>
+</span><span id="Parser-5169"><a href="#Parser-5169"><span class="linenos">5169</span></a>
+</span><span id="Parser-5170"><a href="#Parser-5170"><span class="linenos">5170</span></a> <span class="k">def</span> <span class="nf">_parse_null</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5171"><a href="#Parser-5171"><span class="linenos">5171</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">NULL_TOKENS</span><span class="p">):</span>
+</span><span id="Parser-5172"><a href="#Parser-5172"><span class="linenos">5172</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NULL</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5173"><a href="#Parser-5173"><span class="linenos">5173</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-5174"><a href="#Parser-5174"><span class="linenos">5174</span></a>
+</span><span id="Parser-5175"><a href="#Parser-5175"><span class="linenos">5175</span></a> <span class="k">def</span> <span class="nf">_parse_boolean</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5176"><a href="#Parser-5176"><span class="linenos">5176</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">):</span>
+</span><span id="Parser-5177"><a href="#Parser-5177"><span class="linenos">5177</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TRUE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5178"><a href="#Parser-5178"><span class="linenos">5178</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">):</span>
+</span><span id="Parser-5179"><a href="#Parser-5179"><span class="linenos">5179</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FALSE</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5180"><a href="#Parser-5180"><span class="linenos">5180</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
+</span><span id="Parser-5181"><a href="#Parser-5181"><span class="linenos">5181</span></a>
+</span><span id="Parser-5182"><a href="#Parser-5182"><span class="linenos">5182</span></a> <span class="k">def</span> <span class="nf">_parse_star</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5183"><a href="#Parser-5183"><span class="linenos">5183</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">):</span>
+</span><span id="Parser-5184"><a href="#Parser-5184"><span class="linenos">5184</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">PRIMARY_PARSERS</span><span class="p">[</span><span class="n">TokenType</span><span class="o">.</span><span class="n">STAR</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5185"><a href="#Parser-5185"><span class="linenos">5185</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_placeholder</span><span class="p">()</span>
</span><span id="Parser-5186"><a href="#Parser-5186"><span class="linenos">5186</span></a>
-</span><span id="Parser-5187"><a href="#Parser-5187"><span class="linenos">5187</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5188"><a href="#Parser-5188"><span class="linenos">5188</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">):</span>
-</span><span id="Parser-5189"><a href="#Parser-5189"><span class="linenos">5189</span></a> <span class="n">placeholder</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Parser-5190"><a href="#Parser-5190"><span class="linenos">5190</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
-</span><span id="Parser-5191"><a href="#Parser-5191"><span class="linenos">5191</span></a> <span class="k">return</span> <span class="n">placeholder</span>
-</span><span id="Parser-5192"><a href="#Parser-5192"><span class="linenos">5192</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-5193"><a href="#Parser-5193"><span class="linenos">5193</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5194"><a href="#Parser-5194"><span class="linenos">5194</span></a>
-</span><span id="Parser-5195"><a href="#Parser-5195"><span class="linenos">5195</span></a> <span class="k">def</span> <span class="nf">_parse_except</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Parser-5196"><a href="#Parser-5196"><span class="linenos">5196</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">):</span>
-</span><span id="Parser-5197"><a href="#Parser-5197"><span class="linenos">5197</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5198"><a href="#Parser-5198"><span class="linenos">5198</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-5199"><a href="#Parser-5199"><span class="linenos">5199</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
-</span><span id="Parser-5200"><a href="#Parser-5200"><span class="linenos">5200</span></a>
-</span><span id="Parser-5201"><a href="#Parser-5201"><span class="linenos">5201</span></a> <span class="n">except_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-5202"><a href="#Parser-5202"><span class="linenos">5202</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">except_column</span><span class="p">]</span> <span class="k">if</span> <span class="n">except_column</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-5203"><a href="#Parser-5203"><span class="linenos">5203</span></a>
-</span><span id="Parser-5204"><a href="#Parser-5204"><span class="linenos">5204</span></a> <span class="k">def</span> <span class="nf">_parse_replace</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
-</span><span id="Parser-5205"><a href="#Parser-5205"><span class="linenos">5205</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">):</span>
-</span><span id="Parser-5206"><a href="#Parser-5206"><span class="linenos">5206</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5207"><a href="#Parser-5207"><span class="linenos">5207</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-5208"><a href="#Parser-5208"><span class="linenos">5208</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">)</span>
-</span><span id="Parser-5209"><a href="#Parser-5209"><span class="linenos">5209</span></a>
-</span><span id="Parser-5210"><a href="#Parser-5210"><span class="linenos">5210</span></a> <span class="n">replace_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
-</span><span id="Parser-5211"><a href="#Parser-5211"><span class="linenos">5211</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">replace_expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">replace_expression</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-5212"><a href="#Parser-5212"><span class="linenos">5212</span></a>
-</span><span id="Parser-5213"><a href="#Parser-5213"><span class="linenos">5213</span></a> <span class="k">def</span> <span class="nf">_parse_csv</span><span class="p">(</span>
-</span><span id="Parser-5214"><a href="#Parser-5214"><span class="linenos">5214</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span>
-</span><span id="Parser-5215"><a href="#Parser-5215"><span class="linenos">5215</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5216"><a href="#Parser-5216"><span class="linenos">5216</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="Parser-5217"><a href="#Parser-5217"><span class="linenos">5217</span></a> <span class="n">items</span> <span class="o">=</span> <span class="p">[</span><span class="n">parse_result</span><span class="p">]</span> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
-</span><span id="Parser-5218"><a href="#Parser-5218"><span class="linenos">5218</span></a>
-</span><span id="Parser-5219"><a href="#Parser-5219"><span class="linenos">5219</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">sep</span><span class="p">):</span>
-</span><span id="Parser-5220"><a href="#Parser-5220"><span class="linenos">5220</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
-</span><span id="Parser-5221"><a href="#Parser-5221"><span class="linenos">5221</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="Parser-5222"><a href="#Parser-5222"><span class="linenos">5222</span></a> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-5223"><a href="#Parser-5223"><span class="linenos">5223</span></a> <span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
-</span><span id="Parser-5224"><a href="#Parser-5224"><span class="linenos">5224</span></a>
-</span><span id="Parser-5225"><a href="#Parser-5225"><span class="linenos">5225</span></a> <span class="k">return</span> <span class="n">items</span>
-</span><span id="Parser-5226"><a href="#Parser-5226"><span class="linenos">5226</span></a>
-</span><span id="Parser-5227"><a href="#Parser-5227"><span class="linenos">5227</span></a> <span class="k">def</span> <span class="nf">_parse_tokens</span><span class="p">(</span>
-</span><span id="Parser-5228"><a href="#Parser-5228"><span class="linenos">5228</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
-</span><span id="Parser-5229"><a href="#Parser-5229"><span class="linenos">5229</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5230"><a href="#Parser-5230"><span class="linenos">5230</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="Parser-5187"><a href="#Parser-5187"><span class="linenos">5187</span></a> <span class="k">def</span> <span class="nf">_parse_parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Parameter</span><span class="p">:</span>
+</span><span id="Parser-5188"><a href="#Parser-5188"><span class="linenos">5188</span></a> <span class="k">def</span> <span class="nf">_parse_parameter_part</span><span class="p">()</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5189"><a href="#Parser-5189"><span class="linenos">5189</span></a> <span class="k">return</span> <span class="p">(</span>
+</span><span id="Parser-5190"><a href="#Parser-5190"><span class="linenos">5190</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_identifier</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5191"><a href="#Parser-5191"><span class="linenos">5191</span></a> <span class="p">)</span>
+</span><span id="Parser-5192"><a href="#Parser-5192"><span class="linenos">5192</span></a>
+</span><span id="Parser-5193"><a href="#Parser-5193"><span class="linenos">5193</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_BRACE</span><span class="p">)</span>
+</span><span id="Parser-5194"><a href="#Parser-5194"><span class="linenos">5194</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
+</span><span id="Parser-5195"><a href="#Parser-5195"><span class="linenos">5195</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLON</span><span class="p">)</span> <span class="ow">and</span> <span class="n">_parse_parameter_part</span><span class="p">()</span>
+</span><span id="Parser-5196"><a href="#Parser-5196"><span class="linenos">5196</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_BRACE</span><span class="p">)</span>
+</span><span id="Parser-5197"><a href="#Parser-5197"><span class="linenos">5197</span></a>
+</span><span id="Parser-5198"><a href="#Parser-5198"><span class="linenos">5198</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Parameter</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Parser-5199"><a href="#Parser-5199"><span class="linenos">5199</span></a>
+</span><span id="Parser-5200"><a href="#Parser-5200"><span class="linenos">5200</span></a> <span class="k">def</span> <span class="nf">_parse_placeholder</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5201"><a href="#Parser-5201"><span class="linenos">5201</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">):</span>
+</span><span id="Parser-5202"><a href="#Parser-5202"><span class="linenos">5202</span></a> <span class="n">placeholder</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">PLACEHOLDER_PARSERS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">](</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Parser-5203"><a href="#Parser-5203"><span class="linenos">5203</span></a> <span class="k">if</span> <span class="n">placeholder</span><span class="p">:</span>
+</span><span id="Parser-5204"><a href="#Parser-5204"><span class="linenos">5204</span></a> <span class="k">return</span> <span class="n">placeholder</span>
+</span><span id="Parser-5205"><a href="#Parser-5205"><span class="linenos">5205</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-5206"><a href="#Parser-5206"><span class="linenos">5206</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5207"><a href="#Parser-5207"><span class="linenos">5207</span></a>
+</span><span id="Parser-5208"><a href="#Parser-5208"><span class="linenos">5208</span></a> <span class="k">def</span> <span class="nf">_parse_except</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-5209"><a href="#Parser-5209"><span class="linenos">5209</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">EXCEPT</span><span class="p">):</span>
+</span><span id="Parser-5210"><a href="#Parser-5210"><span class="linenos">5210</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5211"><a href="#Parser-5211"><span class="linenos">5211</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-5212"><a href="#Parser-5212"><span class="linenos">5212</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">)</span>
+</span><span id="Parser-5213"><a href="#Parser-5213"><span class="linenos">5213</span></a>
+</span><span id="Parser-5214"><a href="#Parser-5214"><span class="linenos">5214</span></a> <span class="n">except_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-5215"><a href="#Parser-5215"><span class="linenos">5215</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">except_column</span><span class="p">]</span> <span class="k">if</span> <span class="n">except_column</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-5216"><a href="#Parser-5216"><span class="linenos">5216</span></a>
+</span><span id="Parser-5217"><a href="#Parser-5217"><span class="linenos">5217</span></a> <span class="k">def</span> <span class="nf">_parse_replace</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]]:</span>
+</span><span id="Parser-5218"><a href="#Parser-5218"><span class="linenos">5218</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">REPLACE</span><span class="p">):</span>
+</span><span id="Parser-5219"><a href="#Parser-5219"><span class="linenos">5219</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5220"><a href="#Parser-5220"><span class="linenos">5220</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-5221"><a href="#Parser-5221"><span class="linenos">5221</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">)</span>
+</span><span id="Parser-5222"><a href="#Parser-5222"><span class="linenos">5222</span></a>
+</span><span id="Parser-5223"><a href="#Parser-5223"><span class="linenos">5223</span></a> <span class="n">replace_expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span>
+</span><span id="Parser-5224"><a href="#Parser-5224"><span class="linenos">5224</span></a> <span class="k">return</span> <span class="p">[</span><span class="n">replace_expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">replace_expression</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-5225"><a href="#Parser-5225"><span class="linenos">5225</span></a>
+</span><span id="Parser-5226"><a href="#Parser-5226"><span class="linenos">5226</span></a> <span class="k">def</span> <span class="nf">_parse_csv</span><span class="p">(</span>
+</span><span id="Parser-5227"><a href="#Parser-5227"><span class="linenos">5227</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span>
+</span><span id="Parser-5228"><a href="#Parser-5228"><span class="linenos">5228</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5229"><a href="#Parser-5229"><span class="linenos">5229</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="Parser-5230"><a href="#Parser-5230"><span class="linenos">5230</span></a> <span class="n">items</span> <span class="o">=</span> <span class="p">[</span><span class="n">parse_result</span><span class="p">]</span> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
</span><span id="Parser-5231"><a href="#Parser-5231"><span class="linenos">5231</span></a>
-</span><span id="Parser-5232"><a href="#Parser-5232"><span class="linenos">5232</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
-</span><span id="Parser-5233"><a href="#Parser-5233"><span class="linenos">5233</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5234"><a href="#Parser-5234"><span class="linenos">5234</span></a> <span class="n">expressions</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
-</span><span id="Parser-5235"><a href="#Parser-5235"><span class="linenos">5235</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-5236"><a href="#Parser-5236"><span class="linenos">5236</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
-</span><span id="Parser-5237"><a href="#Parser-5237"><span class="linenos">5237</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
-</span><span id="Parser-5238"><a href="#Parser-5238"><span class="linenos">5238</span></a> <span class="p">)</span>
+</span><span id="Parser-5232"><a href="#Parser-5232"><span class="linenos">5232</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">sep</span><span class="p">):</span>
+</span><span id="Parser-5233"><a href="#Parser-5233"><span class="linenos">5233</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
+</span><span id="Parser-5234"><a href="#Parser-5234"><span class="linenos">5234</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="Parser-5235"><a href="#Parser-5235"><span class="linenos">5235</span></a> <span class="k">if</span> <span class="n">parse_result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-5236"><a href="#Parser-5236"><span class="linenos">5236</span></a> <span class="n">items</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parse_result</span><span class="p">)</span>
+</span><span id="Parser-5237"><a href="#Parser-5237"><span class="linenos">5237</span></a>
+</span><span id="Parser-5238"><a href="#Parser-5238"><span class="linenos">5238</span></a> <span class="k">return</span> <span class="n">items</span>
</span><span id="Parser-5239"><a href="#Parser-5239"><span class="linenos">5239</span></a>
-</span><span id="Parser-5240"><a href="#Parser-5240"><span class="linenos">5240</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-5241"><a href="#Parser-5241"><span class="linenos">5241</span></a>
-</span><span id="Parser-5242"><a href="#Parser-5242"><span class="linenos">5242</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5243"><a href="#Parser-5243"><span class="linenos">5243</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
+</span><span id="Parser-5240"><a href="#Parser-5240"><span class="linenos">5240</span></a> <span class="k">def</span> <span class="nf">_parse_tokens</span><span class="p">(</span>
+</span><span id="Parser-5241"><a href="#Parser-5241"><span class="linenos">5241</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">expressions</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
+</span><span id="Parser-5242"><a href="#Parser-5242"><span class="linenos">5242</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5243"><a href="#Parser-5243"><span class="linenos">5243</span></a> <span class="n">this</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
</span><span id="Parser-5244"><a href="#Parser-5244"><span class="linenos">5244</span></a>
-</span><span id="Parser-5245"><a href="#Parser-5245"><span class="linenos">5245</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
-</span><span id="Parser-5246"><a href="#Parser-5246"><span class="linenos">5246</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="Parser-5247"><a href="#Parser-5247"><span class="linenos">5247</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5248"><a href="#Parser-5248"><span class="linenos">5248</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
-</span><span id="Parser-5249"><a href="#Parser-5249"><span class="linenos">5249</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">parse_method</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">),</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span>
-</span><span id="Parser-5250"><a href="#Parser-5250"><span class="linenos">5250</span></a> <span class="p">)</span>
-</span><span id="Parser-5251"><a href="#Parser-5251"><span class="linenos">5251</span></a>
-</span><span id="Parser-5252"><a href="#Parser-5252"><span class="linenos">5252</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">:</span>
-</span><span id="Parser-5253"><a href="#Parser-5253"><span class="linenos">5253</span></a> <span class="n">wrapped</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
-</span><span id="Parser-5254"><a href="#Parser-5254"><span class="linenos">5254</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">wrapped</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">optional</span><span class="p">:</span>
-</span><span id="Parser-5255"><a href="#Parser-5255"><span class="linenos">5255</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting (&quot;</span><span class="p">)</span>
-</span><span id="Parser-5256"><a href="#Parser-5256"><span class="linenos">5256</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
-</span><span id="Parser-5257"><a href="#Parser-5257"><span class="linenos">5257</span></a> <span class="k">if</span> <span class="n">wrapped</span><span class="p">:</span>
-</span><span id="Parser-5258"><a href="#Parser-5258"><span class="linenos">5258</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-5259"><a href="#Parser-5259"><span class="linenos">5259</span></a> <span class="k">return</span> <span class="n">parse_result</span>
-</span><span id="Parser-5260"><a href="#Parser-5260"><span class="linenos">5260</span></a>
-</span><span id="Parser-5261"><a href="#Parser-5261"><span class="linenos">5261</span></a> <span class="k">def</span> <span class="nf">_parse_expressions</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5262"><a href="#Parser-5262"><span class="linenos">5262</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">)</span>
-</span><span id="Parser-5263"><a href="#Parser-5263"><span class="linenos">5263</span></a>
-</span><span id="Parser-5264"><a href="#Parser-5264"><span class="linenos">5264</span></a> <span class="k">def</span> <span class="nf">_parse_select_or_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5265"><a href="#Parser-5265"><span class="linenos">5265</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
-</span><span id="Parser-5266"><a href="#Parser-5266"><span class="linenos">5266</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
-</span><span id="Parser-5267"><a href="#Parser-5267"><span class="linenos">5267</span></a> <span class="p">)</span>
-</span><span id="Parser-5268"><a href="#Parser-5268"><span class="linenos">5268</span></a>
-</span><span id="Parser-5269"><a href="#Parser-5269"><span class="linenos">5269</span></a> <span class="k">def</span> <span class="nf">_parse_ddl_select</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5270"><a href="#Parser-5270"><span class="linenos">5270</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span>
-</span><span id="Parser-5271"><a href="#Parser-5271"><span class="linenos">5271</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
-</span><span id="Parser-5272"><a href="#Parser-5272"><span class="linenos">5272</span></a> <span class="p">)</span>
+</span><span id="Parser-5245"><a href="#Parser-5245"><span class="linenos">5245</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="n">expressions</span><span class="p">):</span>
+</span><span id="Parser-5246"><a href="#Parser-5246"><span class="linenos">5246</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5247"><a href="#Parser-5247"><span class="linenos">5247</span></a> <span class="n">expressions</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span><span class="p">],</span>
+</span><span id="Parser-5248"><a href="#Parser-5248"><span class="linenos">5248</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-5249"><a href="#Parser-5249"><span class="linenos">5249</span></a> <span class="n">comments</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev_comments</span><span class="p">,</span>
+</span><span id="Parser-5250"><a href="#Parser-5250"><span class="linenos">5250</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">parse_method</span><span class="p">(),</span>
+</span><span id="Parser-5251"><a href="#Parser-5251"><span class="linenos">5251</span></a> <span class="p">)</span>
+</span><span id="Parser-5252"><a href="#Parser-5252"><span class="linenos">5252</span></a>
+</span><span id="Parser-5253"><a href="#Parser-5253"><span class="linenos">5253</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-5254"><a href="#Parser-5254"><span class="linenos">5254</span></a>
+</span><span id="Parser-5255"><a href="#Parser-5255"><span class="linenos">5255</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_id_vars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5256"><a href="#Parser-5256"><span class="linenos">5256</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span><span class="p">)</span>
+</span><span id="Parser-5257"><a href="#Parser-5257"><span class="linenos">5257</span></a>
+</span><span id="Parser-5258"><a href="#Parser-5258"><span class="linenos">5258</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped_csv</span><span class="p">(</span>
+</span><span id="Parser-5259"><a href="#Parser-5259"><span class="linenos">5259</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="n">TokenType</span> <span class="o">=</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="Parser-5260"><a href="#Parser-5260"><span class="linenos">5260</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5261"><a href="#Parser-5261"><span class="linenos">5261</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span>
+</span><span id="Parser-5262"><a href="#Parser-5262"><span class="linenos">5262</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="n">parse_method</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="n">sep</span><span class="p">),</span> <span class="n">optional</span><span class="o">=</span><span class="n">optional</span>
+</span><span id="Parser-5263"><a href="#Parser-5263"><span class="linenos">5263</span></a> <span class="p">)</span>
+</span><span id="Parser-5264"><a href="#Parser-5264"><span class="linenos">5264</span></a>
+</span><span id="Parser-5265"><a href="#Parser-5265"><span class="linenos">5265</span></a> <span class="k">def</span> <span class="nf">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parse_method</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">,</span> <span class="n">optional</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Any</span><span class="p">:</span>
+</span><span id="Parser-5266"><a href="#Parser-5266"><span class="linenos">5266</span></a> <span class="n">wrapped</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">)</span>
+</span><span id="Parser-5267"><a href="#Parser-5267"><span class="linenos">5267</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">wrapped</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">optional</span><span class="p">:</span>
+</span><span id="Parser-5268"><a href="#Parser-5268"><span class="linenos">5268</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting (&quot;</span><span class="p">)</span>
+</span><span id="Parser-5269"><a href="#Parser-5269"><span class="linenos">5269</span></a> <span class="n">parse_result</span> <span class="o">=</span> <span class="n">parse_method</span><span class="p">()</span>
+</span><span id="Parser-5270"><a href="#Parser-5270"><span class="linenos">5270</span></a> <span class="k">if</span> <span class="n">wrapped</span><span class="p">:</span>
+</span><span id="Parser-5271"><a href="#Parser-5271"><span class="linenos">5271</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-5272"><a href="#Parser-5272"><span class="linenos">5272</span></a> <span class="k">return</span> <span class="n">parse_result</span>
</span><span id="Parser-5273"><a href="#Parser-5273"><span class="linenos">5273</span></a>
-</span><span id="Parser-5274"><a href="#Parser-5274"><span class="linenos">5274</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="Parser-5275"><a href="#Parser-5275"><span class="linenos">5275</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5276"><a href="#Parser-5276"><span class="linenos">5276</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_KIND</span><span class="p">):</span>
-</span><span id="Parser-5277"><a href="#Parser-5277"><span class="linenos">5277</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-5278"><a href="#Parser-5278"><span class="linenos">5278</span></a>
-</span><span id="Parser-5279"><a href="#Parser-5279"><span class="linenos">5279</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
-</span><span id="Parser-5280"><a href="#Parser-5280"><span class="linenos">5280</span></a>
-</span><span id="Parser-5281"><a href="#Parser-5281"><span class="linenos">5281</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-5282"><a href="#Parser-5282"><span class="linenos">5282</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-5283"><a href="#Parser-5283"><span class="linenos">5283</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-5284"><a href="#Parser-5284"><span class="linenos">5284</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">):</span>
-</span><span id="Parser-5285"><a href="#Parser-5285"><span class="linenos">5285</span></a> <span class="n">mode</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-5274"><a href="#Parser-5274"><span class="linenos">5274</span></a> <span class="k">def</span> <span class="nf">_parse_expressions</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5275"><a href="#Parser-5275"><span class="linenos">5275</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">)</span>
+</span><span id="Parser-5276"><a href="#Parser-5276"><span class="linenos">5276</span></a>
+</span><span id="Parser-5277"><a href="#Parser-5277"><span class="linenos">5277</span></a> <span class="k">def</span> <span class="nf">_parse_select_or_expression</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">alias</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5278"><a href="#Parser-5278"><span class="linenos">5278</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span>
+</span><span id="Parser-5279"><a href="#Parser-5279"><span class="linenos">5279</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_expression</span><span class="p">()</span> <span class="k">if</span> <span class="n">alias</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-5280"><a href="#Parser-5280"><span class="linenos">5280</span></a> <span class="p">)</span>
+</span><span id="Parser-5281"><a href="#Parser-5281"><span class="linenos">5281</span></a>
+</span><span id="Parser-5282"><a href="#Parser-5282"><span class="linenos">5282</span></a> <span class="k">def</span> <span class="nf">_parse_ddl_select</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5283"><a href="#Parser-5283"><span class="linenos">5283</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query_modifiers</span><span class="p">(</span>
+</span><span id="Parser-5284"><a href="#Parser-5284"><span class="linenos">5284</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_operations</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_select</span><span class="p">(</span><span class="n">nested</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">parse_subquery_alias</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span>
+</span><span id="Parser-5285"><a href="#Parser-5285"><span class="linenos">5285</span></a> <span class="p">)</span>
</span><span id="Parser-5286"><a href="#Parser-5286"><span class="linenos">5286</span></a>
-</span><span id="Parser-5287"><a href="#Parser-5287"><span class="linenos">5287</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
-</span><span id="Parser-5288"><a href="#Parser-5288"><span class="linenos">5288</span></a> <span class="n">modes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mode</span><span class="p">))</span>
-</span><span id="Parser-5289"><a href="#Parser-5289"><span class="linenos">5289</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
-</span><span id="Parser-5290"><a href="#Parser-5290"><span class="linenos">5290</span></a> <span class="k">break</span>
+</span><span id="Parser-5287"><a href="#Parser-5287"><span class="linenos">5287</span></a> <span class="k">def</span> <span class="nf">_parse_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="Parser-5288"><a href="#Parser-5288"><span class="linenos">5288</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5289"><a href="#Parser-5289"><span class="linenos">5289</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_KIND</span><span class="p">):</span>
+</span><span id="Parser-5290"><a href="#Parser-5290"><span class="linenos">5290</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
</span><span id="Parser-5291"><a href="#Parser-5291"><span class="linenos">5291</span></a>
-</span><span id="Parser-5292"><a href="#Parser-5292"><span class="linenos">5292</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">modes</span><span class="o">=</span><span class="n">modes</span><span class="p">)</span>
+</span><span id="Parser-5292"><a href="#Parser-5292"><span class="linenos">5292</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
</span><span id="Parser-5293"><a href="#Parser-5293"><span class="linenos">5293</span></a>
-</span><span id="Parser-5294"><a href="#Parser-5294"><span class="linenos">5294</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
-</span><span id="Parser-5295"><a href="#Parser-5295"><span class="linenos">5295</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5296"><a href="#Parser-5296"><span class="linenos">5296</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5297"><a href="#Parser-5297"><span class="linenos">5297</span></a> <span class="n">is_rollback</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span>
-</span><span id="Parser-5298"><a href="#Parser-5298"><span class="linenos">5298</span></a>
-</span><span id="Parser-5299"><a href="#Parser-5299"><span class="linenos">5299</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
-</span><span id="Parser-5300"><a href="#Parser-5300"><span class="linenos">5300</span></a>
-</span><span id="Parser-5301"><a href="#Parser-5301"><span class="linenos">5301</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
-</span><span id="Parser-5302"><a href="#Parser-5302"><span class="linenos">5302</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SAVEPOINT&quot;</span><span class="p">)</span>
-</span><span id="Parser-5303"><a href="#Parser-5303"><span class="linenos">5303</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-5294"><a href="#Parser-5294"><span class="linenos">5294</span></a> <span class="n">modes</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-5295"><a href="#Parser-5295"><span class="linenos">5295</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-5296"><a href="#Parser-5296"><span class="linenos">5296</span></a> <span class="n">mode</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-5297"><a href="#Parser-5297"><span class="linenos">5297</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VAR</span><span class="p">):</span>
+</span><span id="Parser-5298"><a href="#Parser-5298"><span class="linenos">5298</span></a> <span class="n">mode</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-5299"><a href="#Parser-5299"><span class="linenos">5299</span></a>
+</span><span id="Parser-5300"><a href="#Parser-5300"><span class="linenos">5300</span></a> <span class="k">if</span> <span class="n">mode</span><span class="p">:</span>
+</span><span id="Parser-5301"><a href="#Parser-5301"><span class="linenos">5301</span></a> <span class="n">modes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">mode</span><span class="p">))</span>
+</span><span id="Parser-5302"><a href="#Parser-5302"><span class="linenos">5302</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMA</span><span class="p">):</span>
+</span><span id="Parser-5303"><a href="#Parser-5303"><span class="linenos">5303</span></a> <span class="k">break</span>
</span><span id="Parser-5304"><a href="#Parser-5304"><span class="linenos">5304</span></a>
-</span><span id="Parser-5305"><a href="#Parser-5305"><span class="linenos">5305</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">):</span>
-</span><span id="Parser-5306"><a href="#Parser-5306"><span class="linenos">5306</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">)</span>
-</span><span id="Parser-5307"><a href="#Parser-5307"><span class="linenos">5307</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHAIN&quot;</span><span class="p">)</span>
-</span><span id="Parser-5308"><a href="#Parser-5308"><span class="linenos">5308</span></a>
-</span><span id="Parser-5309"><a href="#Parser-5309"><span class="linenos">5309</span></a> <span class="k">if</span> <span class="n">is_rollback</span><span class="p">:</span>
-</span><span id="Parser-5310"><a href="#Parser-5310"><span class="linenos">5310</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">,</span> <span class="n">savepoint</span><span class="o">=</span><span class="n">savepoint</span><span class="p">)</span>
+</span><span id="Parser-5305"><a href="#Parser-5305"><span class="linenos">5305</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Transaction</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">modes</span><span class="o">=</span><span class="n">modes</span><span class="p">)</span>
+</span><span id="Parser-5306"><a href="#Parser-5306"><span class="linenos">5306</span></a>
+</span><span id="Parser-5307"><a href="#Parser-5307"><span class="linenos">5307</span></a> <span class="k">def</span> <span class="nf">_parse_commit_or_rollback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Commit</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">:</span>
+</span><span id="Parser-5308"><a href="#Parser-5308"><span class="linenos">5308</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5309"><a href="#Parser-5309"><span class="linenos">5309</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5310"><a href="#Parser-5310"><span class="linenos">5310</span></a> <span class="n">is_rollback</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">ROLLBACK</span>
</span><span id="Parser-5311"><a href="#Parser-5311"><span class="linenos">5311</span></a>
-</span><span id="Parser-5312"><a href="#Parser-5312"><span class="linenos">5312</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Commit</span><span class="p">,</span> <span class="n">chain</span><span class="o">=</span><span class="n">chain</span><span class="p">)</span>
+</span><span id="Parser-5312"><a href="#Parser-5312"><span class="linenos">5312</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span> <span class="s2">&quot;WORK&quot;</span><span class="p">))</span>
</span><span id="Parser-5313"><a href="#Parser-5313"><span class="linenos">5313</span></a>
-</span><span id="Parser-5314"><a href="#Parser-5314"><span class="linenos">5314</span></a> <span class="k">def</span> <span class="nf">_parse_refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Refresh</span><span class="p">:</span>
-</span><span id="Parser-5315"><a href="#Parser-5315"><span class="linenos">5315</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
-</span><span id="Parser-5316"><a href="#Parser-5316"><span class="linenos">5316</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Refresh</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
+</span><span id="Parser-5314"><a href="#Parser-5314"><span class="linenos">5314</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">):</span>
+</span><span id="Parser-5315"><a href="#Parser-5315"><span class="linenos">5315</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SAVEPOINT&quot;</span><span class="p">)</span>
+</span><span id="Parser-5316"><a href="#Parser-5316"><span class="linenos">5316</span></a> <span class="n">savepoint</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
</span><span id="Parser-5317"><a href="#Parser-5317"><span class="linenos">5317</span></a>
-</span><span id="Parser-5318"><a href="#Parser-5318"><span class="linenos">5318</span></a> <span class="k">def</span> <span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5319"><a href="#Parser-5319"><span class="linenos">5319</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">):</span>
-</span><span id="Parser-5320"><a href="#Parser-5320"><span class="linenos">5320</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5318"><a href="#Parser-5318"><span class="linenos">5318</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">):</span>
+</span><span id="Parser-5319"><a href="#Parser-5319"><span class="linenos">5319</span></a> <span class="n">chain</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;NO&quot;</span><span class="p">)</span>
+</span><span id="Parser-5320"><a href="#Parser-5320"><span class="linenos">5320</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHAIN&quot;</span><span class="p">)</span>
</span><span id="Parser-5321"><a href="#Parser-5321"><span class="linenos">5321</span></a>
-</span><span id="Parser-5322"><a href="#Parser-5322"><span class="linenos">5322</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">)</span>
-</span><span id="Parser-5323"><a href="#Parser-5323"><span class="linenos">5323</span></a> <span class="n">exists_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(</span><span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-5324"><a href="#Parser-5324"><span class="linenos">5324</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">()</span>
-</span><span id="Parser-5325"><a href="#Parser-5325"><span class="linenos">5325</span></a>
-</span><span id="Parser-5326"><a href="#Parser-5326"><span class="linenos">5326</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
-</span><span id="Parser-5327"><a href="#Parser-5327"><span class="linenos">5327</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">,</span> <span class="n">exists_column</span><span class="p">)</span>
-</span><span id="Parser-5328"><a href="#Parser-5328"><span class="linenos">5328</span></a>
-</span><span id="Parser-5329"><a href="#Parser-5329"><span class="linenos">5329</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
-</span><span id="Parser-5330"><a href="#Parser-5330"><span class="linenos">5330</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="s2">&quot;AFTER&quot;</span><span class="p">)):</span>
-</span><span id="Parser-5331"><a href="#Parser-5331"><span class="linenos">5331</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
-</span><span id="Parser-5332"><a href="#Parser-5332"><span class="linenos">5332</span></a> <span class="n">column_position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5333"><a href="#Parser-5333"><span class="linenos">5333</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span>
-</span><span id="Parser-5334"><a href="#Parser-5334"><span class="linenos">5334</span></a> <span class="p">)</span>
-</span><span id="Parser-5335"><a href="#Parser-5335"><span class="linenos">5335</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="n">column_position</span><span class="p">)</span>
-</span><span id="Parser-5336"><a href="#Parser-5336"><span class="linenos">5336</span></a>
-</span><span id="Parser-5337"><a href="#Parser-5337"><span class="linenos">5337</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Parser-5322"><a href="#Parser-5322"><span class="linenos">5322</span></a> <span class="k">if</span> <span class="n">is_rollback</span><span class="p">:</span>
+</span><span id="Parser-5323"><a href="#Parser-5323"><span class="linenos">5323</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Rollback</span><span class="p">,</span> <span class="n">savepoint</span><span class="o">=</span><span class="n">savepoint</span><span class="p">)</span>
+</span><span id="Parser-5324"><a href="#Parser-5324"><span class="linenos">5324</span></a>
+</span><span id="Parser-5325"><a href="#Parser-5325"><span class="linenos">5325</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Commit</span><span class="p">,</span> <span class="n">chain</span><span class="o">=</span><span class="n">chain</span><span class="p">)</span>
+</span><span id="Parser-5326"><a href="#Parser-5326"><span class="linenos">5326</span></a>
+</span><span id="Parser-5327"><a href="#Parser-5327"><span class="linenos">5327</span></a> <span class="k">def</span> <span class="nf">_parse_refresh</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Refresh</span><span class="p">:</span>
+</span><span id="Parser-5328"><a href="#Parser-5328"><span class="linenos">5328</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">)</span>
+</span><span id="Parser-5329"><a href="#Parser-5329"><span class="linenos">5329</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Refresh</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">())</span>
+</span><span id="Parser-5330"><a href="#Parser-5330"><span class="linenos">5330</span></a>
+</span><span id="Parser-5331"><a href="#Parser-5331"><span class="linenos">5331</span></a> <span class="k">def</span> <span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5332"><a href="#Parser-5332"><span class="linenos">5332</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">):</span>
+</span><span id="Parser-5333"><a href="#Parser-5333"><span class="linenos">5333</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5334"><a href="#Parser-5334"><span class="linenos">5334</span></a>
+</span><span id="Parser-5335"><a href="#Parser-5335"><span class="linenos">5335</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">)</span>
+</span><span id="Parser-5336"><a href="#Parser-5336"><span class="linenos">5336</span></a> <span class="n">exists_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">(</span><span class="n">not_</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5337"><a href="#Parser-5337"><span class="linenos">5337</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">()</span>
</span><span id="Parser-5338"><a href="#Parser-5338"><span class="linenos">5338</span></a>
-</span><span id="Parser-5339"><a href="#Parser-5339"><span class="linenos">5339</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
-</span><span id="Parser-5340"><a href="#Parser-5340"><span class="linenos">5340</span></a> <span class="n">drop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop</span><span class="p">()</span>
-</span><span id="Parser-5341"><a href="#Parser-5341"><span class="linenos">5341</span></a> <span class="k">if</span> <span class="n">drop</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">drop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">):</span>
-</span><span id="Parser-5342"><a href="#Parser-5342"><span class="linenos">5342</span></a> <span class="n">drop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="n">drop</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMN&quot;</span><span class="p">))</span>
-</span><span id="Parser-5343"><a href="#Parser-5343"><span class="linenos">5343</span></a> <span class="k">return</span> <span class="n">drop</span>
-</span><span id="Parser-5344"><a href="#Parser-5344"><span class="linenos">5344</span></a>
-</span><span id="Parser-5345"><a href="#Parser-5345"><span class="linenos">5345</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
-</span><span id="Parser-5346"><a href="#Parser-5346"><span class="linenos">5346</span></a> <span class="k">def</span> <span class="nf">_parse_drop_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">:</span>
-</span><span id="Parser-5347"><a href="#Parser-5347"><span class="linenos">5347</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5348"><a href="#Parser-5348"><span class="linenos">5348</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">),</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span>
-</span><span id="Parser-5349"><a href="#Parser-5349"><span class="linenos">5349</span></a> <span class="p">)</span>
-</span><span id="Parser-5350"><a href="#Parser-5350"><span class="linenos">5350</span></a>
-</span><span id="Parser-5351"><a href="#Parser-5351"><span class="linenos">5351</span></a> <span class="k">def</span> <span class="nf">_parse_add_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">:</span>
-</span><span id="Parser-5352"><a href="#Parser-5352"><span class="linenos">5352</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5353"><a href="#Parser-5353"><span class="linenos">5353</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
-</span><span id="Parser-5354"><a href="#Parser-5354"><span class="linenos">5354</span></a>
-</span><span id="Parser-5355"><a href="#Parser-5355"><span class="linenos">5355</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">:</span>
-</span><span id="Parser-5356"><a href="#Parser-5356"><span class="linenos">5356</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-5339"><a href="#Parser-5339"><span class="linenos">5339</span></a> <span class="k">if</span> <span class="n">expression</span><span class="p">:</span>
+</span><span id="Parser-5340"><a href="#Parser-5340"><span class="linenos">5340</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;exists&quot;</span><span class="p">,</span> <span class="n">exists_column</span><span class="p">)</span>
+</span><span id="Parser-5341"><a href="#Parser-5341"><span class="linenos">5341</span></a>
+</span><span id="Parser-5342"><a href="#Parser-5342"><span class="linenos">5342</span></a> <span class="c1"># https://docs.databricks.com/delta/update-schema.html#explicitly-update-schema-to-add-columns</span>
+</span><span id="Parser-5343"><a href="#Parser-5343"><span class="linenos">5343</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;FIRST&quot;</span><span class="p">,</span> <span class="s2">&quot;AFTER&quot;</span><span class="p">)):</span>
+</span><span id="Parser-5344"><a href="#Parser-5344"><span class="linenos">5344</span></a> <span class="n">position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span>
+</span><span id="Parser-5345"><a href="#Parser-5345"><span class="linenos">5345</span></a> <span class="n">column_position</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5346"><a href="#Parser-5346"><span class="linenos">5346</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnPosition</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">(),</span> <span class="n">position</span><span class="o">=</span><span class="n">position</span>
+</span><span id="Parser-5347"><a href="#Parser-5347"><span class="linenos">5347</span></a> <span class="p">)</span>
+</span><span id="Parser-5348"><a href="#Parser-5348"><span class="linenos">5348</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span> <span class="n">column_position</span><span class="p">)</span>
+</span><span id="Parser-5349"><a href="#Parser-5349"><span class="linenos">5349</span></a>
+</span><span id="Parser-5350"><a href="#Parser-5350"><span class="linenos">5350</span></a> <span class="k">return</span> <span class="n">expression</span>
+</span><span id="Parser-5351"><a href="#Parser-5351"><span class="linenos">5351</span></a>
+</span><span id="Parser-5352"><a href="#Parser-5352"><span class="linenos">5352</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Drop</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">]:</span>
+</span><span id="Parser-5353"><a href="#Parser-5353"><span class="linenos">5353</span></a> <span class="n">drop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop</span><span class="p">()</span>
+</span><span id="Parser-5354"><a href="#Parser-5354"><span class="linenos">5354</span></a> <span class="k">if</span> <span class="n">drop</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">drop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">):</span>
+</span><span id="Parser-5355"><a href="#Parser-5355"><span class="linenos">5355</span></a> <span class="n">drop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="n">drop</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;kind&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMN&quot;</span><span class="p">))</span>
+</span><span id="Parser-5356"><a href="#Parser-5356"><span class="linenos">5356</span></a> <span class="k">return</span> <span class="n">drop</span>
</span><span id="Parser-5357"><a href="#Parser-5357"><span class="linenos">5357</span></a>
-</span><span id="Parser-5358"><a href="#Parser-5358"><span class="linenos">5358</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHECK&quot;</span><span class="p">):</span>
-</span><span id="Parser-5359"><a href="#Parser-5359"><span class="linenos">5359</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
-</span><span id="Parser-5360"><a href="#Parser-5360"><span class="linenos">5360</span></a> <span class="n">enforced</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENFORCED&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">False</span>
-</span><span id="Parser-5361"><a href="#Parser-5361"><span class="linenos">5361</span></a>
-</span><span id="Parser-5362"><a href="#Parser-5362"><span class="linenos">5362</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5363"><a href="#Parser-5363"><span class="linenos">5363</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">enforced</span><span class="o">=</span><span class="n">enforced</span>
-</span><span id="Parser-5364"><a href="#Parser-5364"><span class="linenos">5364</span></a> <span class="p">)</span>
-</span><span id="Parser-5365"><a href="#Parser-5365"><span class="linenos">5365</span></a>
-</span><span id="Parser-5366"><a href="#Parser-5366"><span class="linenos">5366</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">):</span>
-</span><span id="Parser-5367"><a href="#Parser-5367"><span class="linenos">5367</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_foreign_key</span><span class="p">()</span>
-</span><span id="Parser-5368"><a href="#Parser-5368"><span class="linenos">5368</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span><span class="p">):</span>
-</span><span id="Parser-5369"><a href="#Parser-5369"><span class="linenos">5369</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">()</span>
-</span><span id="Parser-5370"><a href="#Parser-5370"><span class="linenos">5370</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5371"><a href="#Parser-5371"><span class="linenos">5371</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5372"><a href="#Parser-5372"><span class="linenos">5372</span></a>
-</span><span id="Parser-5373"><a href="#Parser-5373"><span class="linenos">5373</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Parser-5358"><a href="#Parser-5358"><span class="linenos">5358</span></a> <span class="c1"># https://docs.aws.amazon.com/athena/latest/ug/alter-table-drop-partition.html</span>
+</span><span id="Parser-5359"><a href="#Parser-5359"><span class="linenos">5359</span></a> <span class="k">def</span> <span class="nf">_parse_drop_partition</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exists</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">:</span>
+</span><span id="Parser-5360"><a href="#Parser-5360"><span class="linenos">5360</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5361"><a href="#Parser-5361"><span class="linenos">5361</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DropPartition</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_partition</span><span class="p">),</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span>
+</span><span id="Parser-5362"><a href="#Parser-5362"><span class="linenos">5362</span></a> <span class="p">)</span>
+</span><span id="Parser-5363"><a href="#Parser-5363"><span class="linenos">5363</span></a>
+</span><span id="Parser-5364"><a href="#Parser-5364"><span class="linenos">5364</span></a> <span class="k">def</span> <span class="nf">_parse_add_constraint</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">:</span>
+</span><span id="Parser-5365"><a href="#Parser-5365"><span class="linenos">5365</span></a> <span class="n">this</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5366"><a href="#Parser-5366"><span class="linenos">5366</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">token_type</span>
+</span><span id="Parser-5367"><a href="#Parser-5367"><span class="linenos">5367</span></a>
+</span><span id="Parser-5368"><a href="#Parser-5368"><span class="linenos">5368</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CONSTRAINT</span><span class="p">:</span>
+</span><span id="Parser-5369"><a href="#Parser-5369"><span class="linenos">5369</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-5370"><a href="#Parser-5370"><span class="linenos">5370</span></a>
+</span><span id="Parser-5371"><a href="#Parser-5371"><span class="linenos">5371</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;CHECK&quot;</span><span class="p">):</span>
+</span><span id="Parser-5372"><a href="#Parser-5372"><span class="linenos">5372</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">)</span>
+</span><span id="Parser-5373"><a href="#Parser-5373"><span class="linenos">5373</span></a> <span class="n">enforced</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ENFORCED&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="kc">False</span>
</span><span id="Parser-5374"><a href="#Parser-5374"><span class="linenos">5374</span></a>
-</span><span id="Parser-5375"><a href="#Parser-5375"><span class="linenos">5375</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_add</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5376"><a href="#Parser-5376"><span class="linenos">5376</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="Parser-5377"><a href="#Parser-5377"><span class="linenos">5377</span></a>
-</span><span id="Parser-5378"><a href="#Parser-5378"><span class="linenos">5378</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ADD_CONSTRAINT_TOKENS</span><span class="p">):</span>
-</span><span id="Parser-5379"><a href="#Parser-5379"><span class="linenos">5379</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_add_constraint</span><span class="p">)</span>
-</span><span id="Parser-5380"><a href="#Parser-5380"><span class="linenos">5380</span></a>
-</span><span id="Parser-5381"><a href="#Parser-5381"><span class="linenos">5381</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-5382"><a href="#Parser-5382"><span class="linenos">5382</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">):</span>
-</span><span id="Parser-5383"><a href="#Parser-5383"><span class="linenos">5383</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-5384"><a href="#Parser-5384"><span class="linenos">5384</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_add_column</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5375"><a href="#Parser-5375"><span class="linenos">5375</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5376"><a href="#Parser-5376"><span class="linenos">5376</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span> <span class="n">enforced</span><span class="o">=</span><span class="n">enforced</span>
+</span><span id="Parser-5377"><a href="#Parser-5377"><span class="linenos">5377</span></a> <span class="p">)</span>
+</span><span id="Parser-5378"><a href="#Parser-5378"><span class="linenos">5378</span></a>
+</span><span id="Parser-5379"><a href="#Parser-5379"><span class="linenos">5379</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">FOREIGN_KEY</span><span class="p">):</span>
+</span><span id="Parser-5380"><a href="#Parser-5380"><span class="linenos">5380</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_foreign_key</span><span class="p">()</span>
+</span><span id="Parser-5381"><a href="#Parser-5381"><span class="linenos">5381</span></a> <span class="k">elif</span> <span class="n">kind</span> <span class="o">==</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PRIMARY_KEY</span><span class="p">):</span>
+</span><span id="Parser-5382"><a href="#Parser-5382"><span class="linenos">5382</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary_key</span><span class="p">()</span>
+</span><span id="Parser-5383"><a href="#Parser-5383"><span class="linenos">5383</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5384"><a href="#Parser-5384"><span class="linenos">5384</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5385"><a href="#Parser-5385"><span class="linenos">5385</span></a>
-</span><span id="Parser-5386"><a href="#Parser-5386"><span class="linenos">5386</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">:</span>
-</span><span id="Parser-5387"><a href="#Parser-5387"><span class="linenos">5387</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">)</span>
-</span><span id="Parser-5388"><a href="#Parser-5388"><span class="linenos">5388</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-5389"><a href="#Parser-5389"><span class="linenos">5389</span></a>
-</span><span id="Parser-5390"><a href="#Parser-5390"><span class="linenos">5390</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
-</span><span id="Parser-5391"><a href="#Parser-5391"><span class="linenos">5391</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">drop</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="Parser-5392"><a href="#Parser-5392"><span class="linenos">5392</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
-</span><span id="Parser-5393"><a href="#Parser-5393"><span class="linenos">5393</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
-</span><span id="Parser-5394"><a href="#Parser-5394"><span class="linenos">5394</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span><span class="p">):</span>
-</span><span id="Parser-5395"><a href="#Parser-5395"><span class="linenos">5395</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
-</span><span id="Parser-5396"><a href="#Parser-5396"><span class="linenos">5396</span></a>
-</span><span id="Parser-5397"><a href="#Parser-5397"><span class="linenos">5397</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">)</span>
-</span><span id="Parser-5398"><a href="#Parser-5398"><span class="linenos">5398</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5399"><a href="#Parser-5399"><span class="linenos">5399</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
-</span><span id="Parser-5400"><a href="#Parser-5400"><span class="linenos">5400</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
-</span><span id="Parser-5401"><a href="#Parser-5401"><span class="linenos">5401</span></a> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TYPE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(),</span>
-</span><span id="Parser-5402"><a href="#Parser-5402"><span class="linenos">5402</span></a> <span class="n">collate</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
-</span><span id="Parser-5403"><a href="#Parser-5403"><span class="linenos">5403</span></a> <span class="n">using</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
-</span><span id="Parser-5404"><a href="#Parser-5404"><span class="linenos">5404</span></a> <span class="p">)</span>
-</span><span id="Parser-5405"><a href="#Parser-5405"><span class="linenos">5405</span></a>
-</span><span id="Parser-5406"><a href="#Parser-5406"><span class="linenos">5406</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_drop</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5407"><a href="#Parser-5407"><span class="linenos">5407</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
-</span><span id="Parser-5408"><a href="#Parser-5408"><span class="linenos">5408</span></a>
-</span><span id="Parser-5409"><a href="#Parser-5409"><span class="linenos">5409</span></a> <span class="n">partition_exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
-</span><span id="Parser-5410"><a href="#Parser-5410"><span class="linenos">5410</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-5411"><a href="#Parser-5411"><span class="linenos">5411</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_partition</span><span class="p">(</span><span class="n">exists</span><span class="o">=</span><span class="n">partition_exists</span><span class="p">))</span>
-</span><span id="Parser-5412"><a href="#Parser-5412"><span class="linenos">5412</span></a>
-</span><span id="Parser-5413"><a href="#Parser-5413"><span class="linenos">5413</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-5414"><a href="#Parser-5414"><span class="linenos">5414</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_column</span><span class="p">)</span>
-</span><span id="Parser-5415"><a href="#Parser-5415"><span class="linenos">5415</span></a>
-</span><span id="Parser-5416"><a href="#Parser-5416"><span class="linenos">5416</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_rename</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">RenameTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">]:</span>
-</span><span id="Parser-5417"><a href="#Parser-5417"><span class="linenos">5417</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">):</span>
-</span><span id="Parser-5418"><a href="#Parser-5418"><span class="linenos">5418</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
-</span><span id="Parser-5419"><a href="#Parser-5419"><span class="linenos">5419</span></a> <span class="n">old_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-5420"><a href="#Parser-5420"><span class="linenos">5420</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
-</span><span id="Parser-5421"><a href="#Parser-5421"><span class="linenos">5421</span></a> <span class="n">new_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-5422"><a href="#Parser-5422"><span class="linenos">5422</span></a>
-</span><span id="Parser-5423"><a href="#Parser-5423"><span class="linenos">5423</span></a> <span class="k">if</span> <span class="n">old_column</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">to</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">new_column</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-5424"><a href="#Parser-5424"><span class="linenos">5424</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5386"><a href="#Parser-5386"><span class="linenos">5386</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AddConstraint</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Parser-5387"><a href="#Parser-5387"><span class="linenos">5387</span></a>
+</span><span id="Parser-5388"><a href="#Parser-5388"><span class="linenos">5388</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_add</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5389"><a href="#Parser-5389"><span class="linenos">5389</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="Parser-5390"><a href="#Parser-5390"><span class="linenos">5390</span></a>
+</span><span id="Parser-5391"><a href="#Parser-5391"><span class="linenos">5391</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ADD_CONSTRAINT_TOKENS</span><span class="p">):</span>
+</span><span id="Parser-5392"><a href="#Parser-5392"><span class="linenos">5392</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_add_constraint</span><span class="p">)</span>
+</span><span id="Parser-5393"><a href="#Parser-5393"><span class="linenos">5393</span></a>
+</span><span id="Parser-5394"><a href="#Parser-5394"><span class="linenos">5394</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-5395"><a href="#Parser-5395"><span class="linenos">5395</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_TABLE_ADD_REQUIRED_FOR_EACH_COLUMN</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">):</span>
+</span><span id="Parser-5396"><a href="#Parser-5396"><span class="linenos">5396</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_field_def</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5397"><a href="#Parser-5397"><span class="linenos">5397</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_wrapped_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_add_column</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5398"><a href="#Parser-5398"><span class="linenos">5398</span></a>
+</span><span id="Parser-5399"><a href="#Parser-5399"><span class="linenos">5399</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">:</span>
+</span><span id="Parser-5400"><a href="#Parser-5400"><span class="linenos">5400</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">)</span>
+</span><span id="Parser-5401"><a href="#Parser-5401"><span class="linenos">5401</span></a> <span class="n">column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_field</span><span class="p">(</span><span class="n">any_token</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5402"><a href="#Parser-5402"><span class="linenos">5402</span></a>
+</span><span id="Parser-5403"><a href="#Parser-5403"><span class="linenos">5403</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DROP</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
+</span><span id="Parser-5404"><a href="#Parser-5404"><span class="linenos">5404</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">drop</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5405"><a href="#Parser-5405"><span class="linenos">5405</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_pair</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">,</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">DEFAULT</span><span class="p">):</span>
+</span><span id="Parser-5406"><a href="#Parser-5406"><span class="linenos">5406</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">())</span>
+</span><span id="Parser-5407"><a href="#Parser-5407"><span class="linenos">5407</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COMMENT</span><span class="p">):</span>
+</span><span id="Parser-5408"><a href="#Parser-5408"><span class="linenos">5408</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span> <span class="n">comment</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_string</span><span class="p">())</span>
+</span><span id="Parser-5409"><a href="#Parser-5409"><span class="linenos">5409</span></a>
+</span><span id="Parser-5410"><a href="#Parser-5410"><span class="linenos">5410</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;SET&quot;</span><span class="p">,</span> <span class="s2">&quot;DATA&quot;</span><span class="p">)</span>
+</span><span id="Parser-5411"><a href="#Parser-5411"><span class="linenos">5411</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5412"><a href="#Parser-5412"><span class="linenos">5412</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterColumn</span><span class="p">,</span>
+</span><span id="Parser-5413"><a href="#Parser-5413"><span class="linenos">5413</span></a> <span class="n">this</span><span class="o">=</span><span class="n">column</span><span class="p">,</span>
+</span><span id="Parser-5414"><a href="#Parser-5414"><span class="linenos">5414</span></a> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TYPE&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(),</span>
+</span><span id="Parser-5415"><a href="#Parser-5415"><span class="linenos">5415</span></a> <span class="n">collate</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLLATE</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_term</span><span class="p">(),</span>
+</span><span id="Parser-5416"><a href="#Parser-5416"><span class="linenos">5416</span></a> <span class="n">using</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">(),</span>
+</span><span id="Parser-5417"><a href="#Parser-5417"><span class="linenos">5417</span></a> <span class="p">)</span>
+</span><span id="Parser-5418"><a href="#Parser-5418"><span class="linenos">5418</span></a>
+</span><span id="Parser-5419"><a href="#Parser-5419"><span class="linenos">5419</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_drop</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5420"><a href="#Parser-5420"><span class="linenos">5420</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span> <span class="o">-</span> <span class="mi">1</span>
+</span><span id="Parser-5421"><a href="#Parser-5421"><span class="linenos">5421</span></a>
+</span><span id="Parser-5422"><a href="#Parser-5422"><span class="linenos">5422</span></a> <span class="n">partition_exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
+</span><span id="Parser-5423"><a href="#Parser-5423"><span class="linenos">5423</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">PARTITION</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-5424"><a href="#Parser-5424"><span class="linenos">5424</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_partition</span><span class="p">(</span><span class="n">exists</span><span class="o">=</span><span class="n">partition_exists</span><span class="p">))</span>
</span><span id="Parser-5425"><a href="#Parser-5425"><span class="linenos">5425</span></a>
-</span><span id="Parser-5426"><a href="#Parser-5426"><span class="linenos">5426</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">old_column</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">new_column</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">)</span>
-</span><span id="Parser-5427"><a href="#Parser-5427"><span class="linenos">5427</span></a>
-</span><span id="Parser-5428"><a href="#Parser-5428"><span class="linenos">5428</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
-</span><span id="Parser-5429"><a href="#Parser-5429"><span class="linenos">5429</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RenameTable</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
-</span><span id="Parser-5430"><a href="#Parser-5430"><span class="linenos">5430</span></a>
-</span><span id="Parser-5431"><a href="#Parser-5431"><span class="linenos">5431</span></a> <span class="k">def</span> <span class="nf">_parse_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="Parser-5432"><a href="#Parser-5432"><span class="linenos">5432</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
-</span><span id="Parser-5433"><a href="#Parser-5433"><span class="linenos">5433</span></a>
-</span><span id="Parser-5434"><a href="#Parser-5434"><span class="linenos">5434</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">):</span>
-</span><span id="Parser-5435"><a href="#Parser-5435"><span class="linenos">5435</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
-</span><span id="Parser-5436"><a href="#Parser-5436"><span class="linenos">5436</span></a>
-</span><span id="Parser-5437"><a href="#Parser-5437"><span class="linenos">5437</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
-</span><span id="Parser-5438"><a href="#Parser-5438"><span class="linenos">5438</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
-</span><span id="Parser-5439"><a href="#Parser-5439"><span class="linenos">5439</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5426"><a href="#Parser-5426"><span class="linenos">5426</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-5427"><a href="#Parser-5427"><span class="linenos">5427</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_drop_column</span><span class="p">)</span>
+</span><span id="Parser-5428"><a href="#Parser-5428"><span class="linenos">5428</span></a>
+</span><span id="Parser-5429"><a href="#Parser-5429"><span class="linenos">5429</span></a> <span class="k">def</span> <span class="nf">_parse_alter_table_rename</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">RenameTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">]:</span>
+</span><span id="Parser-5430"><a href="#Parser-5430"><span class="linenos">5430</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">COLUMN</span><span class="p">):</span>
+</span><span id="Parser-5431"><a href="#Parser-5431"><span class="linenos">5431</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
+</span><span id="Parser-5432"><a href="#Parser-5432"><span class="linenos">5432</span></a> <span class="n">old_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-5433"><a href="#Parser-5433"><span class="linenos">5433</span></a> <span class="n">to</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
+</span><span id="Parser-5434"><a href="#Parser-5434"><span class="linenos">5434</span></a> <span class="n">new_column</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-5435"><a href="#Parser-5435"><span class="linenos">5435</span></a>
+</span><span id="Parser-5436"><a href="#Parser-5436"><span class="linenos">5436</span></a> <span class="k">if</span> <span class="n">old_column</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">to</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">new_column</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-5437"><a href="#Parser-5437"><span class="linenos">5437</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5438"><a href="#Parser-5438"><span class="linenos">5438</span></a>
+</span><span id="Parser-5439"><a href="#Parser-5439"><span class="linenos">5439</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RenameColumn</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">old_column</span><span class="p">,</span> <span class="n">to</span><span class="o">=</span><span class="n">new_column</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">)</span>
</span><span id="Parser-5440"><a href="#Parser-5440"><span class="linenos">5440</span></a>
-</span><span id="Parser-5441"><a href="#Parser-5441"><span class="linenos">5441</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
-</span><span id="Parser-5442"><a href="#Parser-5442"><span class="linenos">5442</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5441"><a href="#Parser-5441"><span class="linenos">5441</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TO&quot;</span><span class="p">)</span>
+</span><span id="Parser-5442"><a href="#Parser-5442"><span class="linenos">5442</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">RenameTable</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
</span><span id="Parser-5443"><a href="#Parser-5443"><span class="linenos">5443</span></a>
-</span><span id="Parser-5444"><a href="#Parser-5444"><span class="linenos">5444</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-5445"><a href="#Parser-5445"><span class="linenos">5445</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Parser-5446"><a href="#Parser-5446"><span class="linenos">5446</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
-</span><span id="Parser-5447"><a href="#Parser-5447"><span class="linenos">5447</span></a>
-</span><span id="Parser-5448"><a href="#Parser-5448"><span class="linenos">5448</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">actions</span><span class="p">:</span>
-</span><span id="Parser-5449"><a href="#Parser-5449"><span class="linenos">5449</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5450"><a href="#Parser-5450"><span class="linenos">5450</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
-</span><span id="Parser-5451"><a href="#Parser-5451"><span class="linenos">5451</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-5452"><a href="#Parser-5452"><span class="linenos">5452</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
-</span><span id="Parser-5453"><a href="#Parser-5453"><span class="linenos">5453</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
-</span><span id="Parser-5454"><a href="#Parser-5454"><span class="linenos">5454</span></a> <span class="n">only</span><span class="o">=</span><span class="n">only</span><span class="p">,</span>
-</span><span id="Parser-5455"><a href="#Parser-5455"><span class="linenos">5455</span></a> <span class="p">)</span>
+</span><span id="Parser-5444"><a href="#Parser-5444"><span class="linenos">5444</span></a> <span class="k">def</span> <span class="nf">_parse_alter</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="Parser-5445"><a href="#Parser-5445"><span class="linenos">5445</span></a> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span>
+</span><span id="Parser-5446"><a href="#Parser-5446"><span class="linenos">5446</span></a>
+</span><span id="Parser-5447"><a href="#Parser-5447"><span class="linenos">5447</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">TABLE</span><span class="p">):</span>
+</span><span id="Parser-5448"><a href="#Parser-5448"><span class="linenos">5448</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
+</span><span id="Parser-5449"><a href="#Parser-5449"><span class="linenos">5449</span></a>
+</span><span id="Parser-5450"><a href="#Parser-5450"><span class="linenos">5450</span></a> <span class="n">exists</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_exists</span><span class="p">()</span>
+</span><span id="Parser-5451"><a href="#Parser-5451"><span class="linenos">5451</span></a> <span class="n">only</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ONLY&quot;</span><span class="p">)</span>
+</span><span id="Parser-5452"><a href="#Parser-5452"><span class="linenos">5452</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">(</span><span class="n">schema</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="Parser-5453"><a href="#Parser-5453"><span class="linenos">5453</span></a>
+</span><span id="Parser-5454"><a href="#Parser-5454"><span class="linenos">5454</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
+</span><span id="Parser-5455"><a href="#Parser-5455"><span class="linenos">5455</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
</span><span id="Parser-5456"><a href="#Parser-5456"><span class="linenos">5456</span></a>
-</span><span id="Parser-5457"><a href="#Parser-5457"><span class="linenos">5457</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
-</span><span id="Parser-5458"><a href="#Parser-5458"><span class="linenos">5458</span></a>
-</span><span id="Parser-5459"><a href="#Parser-5459"><span class="linenos">5459</span></a> <span class="k">def</span> <span class="nf">_parse_merge</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span>
-</span><span id="Parser-5460"><a href="#Parser-5460"><span class="linenos">5460</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">)</span>
-</span><span id="Parser-5461"><a href="#Parser-5461"><span class="linenos">5461</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="Parser-5462"><a href="#Parser-5462"><span class="linenos">5462</span></a>
-</span><span id="Parser-5463"><a href="#Parser-5463"><span class="linenos">5463</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-5464"><a href="#Parser-5464"><span class="linenos">5464</span></a> <span class="n">target</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
-</span><span id="Parser-5465"><a href="#Parser-5465"><span class="linenos">5465</span></a>
-</span><span id="Parser-5466"><a href="#Parser-5466"><span class="linenos">5466</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span>
-</span><span id="Parser-5467"><a href="#Parser-5467"><span class="linenos">5467</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
-</span><span id="Parser-5468"><a href="#Parser-5468"><span class="linenos">5468</span></a>
-</span><span id="Parser-5469"><a href="#Parser-5469"><span class="linenos">5469</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
-</span><span id="Parser-5470"><a href="#Parser-5470"><span class="linenos">5470</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-5457"><a href="#Parser-5457"><span class="linenos">5457</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ALTER_PARSERS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-5458"><a href="#Parser-5458"><span class="linenos">5458</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Parser-5459"><a href="#Parser-5459"><span class="linenos">5459</span></a> <span class="n">actions</span> <span class="o">=</span> <span class="n">ensure_list</span><span class="p">(</span><span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
+</span><span id="Parser-5460"><a href="#Parser-5460"><span class="linenos">5460</span></a>
+</span><span id="Parser-5461"><a href="#Parser-5461"><span class="linenos">5461</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="n">actions</span><span class="p">:</span>
+</span><span id="Parser-5462"><a href="#Parser-5462"><span class="linenos">5462</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5463"><a href="#Parser-5463"><span class="linenos">5463</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AlterTable</span><span class="p">,</span>
+</span><span id="Parser-5464"><a href="#Parser-5464"><span class="linenos">5464</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-5465"><a href="#Parser-5465"><span class="linenos">5465</span></a> <span class="n">exists</span><span class="o">=</span><span class="n">exists</span><span class="p">,</span>
+</span><span id="Parser-5466"><a href="#Parser-5466"><span class="linenos">5466</span></a> <span class="n">actions</span><span class="o">=</span><span class="n">actions</span><span class="p">,</span>
+</span><span id="Parser-5467"><a href="#Parser-5467"><span class="linenos">5467</span></a> <span class="n">only</span><span class="o">=</span><span class="n">only</span><span class="p">,</span>
+</span><span id="Parser-5468"><a href="#Parser-5468"><span class="linenos">5468</span></a> <span class="p">)</span>
+</span><span id="Parser-5469"><a href="#Parser-5469"><span class="linenos">5469</span></a>
+</span><span id="Parser-5470"><a href="#Parser-5470"><span class="linenos">5470</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="n">start</span><span class="p">)</span>
</span><span id="Parser-5471"><a href="#Parser-5471"><span class="linenos">5471</span></a>
-</span><span id="Parser-5472"><a href="#Parser-5472"><span class="linenos">5472</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5473"><a href="#Parser-5473"><span class="linenos">5473</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
-</span><span id="Parser-5474"><a href="#Parser-5474"><span class="linenos">5474</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
-</span><span id="Parser-5475"><a href="#Parser-5475"><span class="linenos">5475</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
-</span><span id="Parser-5476"><a href="#Parser-5476"><span class="linenos">5476</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
-</span><span id="Parser-5477"><a href="#Parser-5477"><span class="linenos">5477</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_when_matched</span><span class="p">(),</span>
-</span><span id="Parser-5478"><a href="#Parser-5478"><span class="linenos">5478</span></a> <span class="p">)</span>
-</span><span id="Parser-5479"><a href="#Parser-5479"><span class="linenos">5479</span></a>
-</span><span id="Parser-5480"><a href="#Parser-5480"><span class="linenos">5480</span></a> <span class="k">def</span> <span class="nf">_parse_when_matched</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">]:</span>
-</span><span id="Parser-5481"><a href="#Parser-5481"><span class="linenos">5481</span></a> <span class="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-5482"><a href="#Parser-5482"><span class="linenos">5482</span></a>
-</span><span id="Parser-5483"><a href="#Parser-5483"><span class="linenos">5483</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">):</span>
-</span><span id="Parser-5484"><a href="#Parser-5484"><span class="linenos">5484</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
-</span><span id="Parser-5485"><a href="#Parser-5485"><span class="linenos">5485</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCHED&quot;</span><span class="p">)</span>
-</span><span id="Parser-5486"><a href="#Parser-5486"><span class="linenos">5486</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-5487"><a href="#Parser-5487"><span class="linenos">5487</span></a> <span class="kc">False</span>
-</span><span id="Parser-5488"><a href="#Parser-5488"><span class="linenos">5488</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;TARGET&quot;</span><span class="p">)</span>
-</span><span id="Parser-5489"><a href="#Parser-5489"><span class="linenos">5489</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;SOURCE&quot;</span><span class="p">)</span>
-</span><span id="Parser-5490"><a href="#Parser-5490"><span class="linenos">5490</span></a> <span class="p">)</span>
-</span><span id="Parser-5491"><a href="#Parser-5491"><span class="linenos">5491</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-5472"><a href="#Parser-5472"><span class="linenos">5472</span></a> <span class="k">def</span> <span class="nf">_parse_merge</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">:</span>
+</span><span id="Parser-5473"><a href="#Parser-5473"><span class="linenos">5473</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INTO</span><span class="p">)</span>
+</span><span id="Parser-5474"><a href="#Parser-5474"><span class="linenos">5474</span></a> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="Parser-5475"><a href="#Parser-5475"><span class="linenos">5475</span></a>
+</span><span id="Parser-5476"><a href="#Parser-5476"><span class="linenos">5476</span></a> <span class="k">if</span> <span class="n">target</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-5477"><a href="#Parser-5477"><span class="linenos">5477</span></a> <span class="n">target</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_alias</span><span class="p">())</span>
+</span><span id="Parser-5478"><a href="#Parser-5478"><span class="linenos">5478</span></a>
+</span><span id="Parser-5479"><a href="#Parser-5479"><span class="linenos">5479</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">USING</span><span class="p">)</span>
+</span><span id="Parser-5480"><a href="#Parser-5480"><span class="linenos">5480</span></a> <span class="n">using</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table</span><span class="p">()</span>
+</span><span id="Parser-5481"><a href="#Parser-5481"><span class="linenos">5481</span></a>
+</span><span id="Parser-5482"><a href="#Parser-5482"><span class="linenos">5482</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">ON</span><span class="p">)</span>
+</span><span id="Parser-5483"><a href="#Parser-5483"><span class="linenos">5483</span></a> <span class="n">on</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
+</span><span id="Parser-5484"><a href="#Parser-5484"><span class="linenos">5484</span></a>
+</span><span id="Parser-5485"><a href="#Parser-5485"><span class="linenos">5485</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5486"><a href="#Parser-5486"><span class="linenos">5486</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Merge</span><span class="p">,</span>
+</span><span id="Parser-5487"><a href="#Parser-5487"><span class="linenos">5487</span></a> <span class="n">this</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
+</span><span id="Parser-5488"><a href="#Parser-5488"><span class="linenos">5488</span></a> <span class="n">using</span><span class="o">=</span><span class="n">using</span><span class="p">,</span>
+</span><span id="Parser-5489"><a href="#Parser-5489"><span class="linenos">5489</span></a> <span class="n">on</span><span class="o">=</span><span class="n">on</span><span class="p">,</span>
+</span><span id="Parser-5490"><a href="#Parser-5490"><span class="linenos">5490</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_when_matched</span><span class="p">(),</span>
+</span><span id="Parser-5491"><a href="#Parser-5491"><span class="linenos">5491</span></a> <span class="p">)</span>
</span><span id="Parser-5492"><a href="#Parser-5492"><span class="linenos">5492</span></a>
-</span><span id="Parser-5493"><a href="#Parser-5493"><span class="linenos">5493</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
-</span><span id="Parser-5494"><a href="#Parser-5494"><span class="linenos">5494</span></a>
-</span><span id="Parser-5495"><a href="#Parser-5495"><span class="linenos">5495</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</span><span class="p">):</span>
-</span><span id="Parser-5496"><a href="#Parser-5496"><span class="linenos">5496</span></a> <span class="n">_this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
-</span><span id="Parser-5497"><a href="#Parser-5497"><span class="linenos">5497</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
-</span><span id="Parser-5498"><a href="#Parser-5498"><span class="linenos">5498</span></a> <span class="n">then</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">_this</span><span class="p">)</span>
-</span><span id="Parser-5499"><a href="#Parser-5499"><span class="linenos">5499</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5500"><a href="#Parser-5500"><span class="linenos">5500</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5501"><a href="#Parser-5501"><span class="linenos">5501</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
-</span><span id="Parser-5502"><a href="#Parser-5502"><span class="linenos">5502</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
-</span><span id="Parser-5503"><a href="#Parser-5503"><span class="linenos">5503</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
-</span><span id="Parser-5504"><a href="#Parser-5504"><span class="linenos">5504</span></a> <span class="p">)</span>
-</span><span id="Parser-5505"><a href="#Parser-5505"><span class="linenos">5505</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">):</span>
-</span><span id="Parser-5506"><a href="#Parser-5506"><span class="linenos">5506</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
-</span><span id="Parser-5507"><a href="#Parser-5507"><span class="linenos">5507</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
-</span><span id="Parser-5508"><a href="#Parser-5508"><span class="linenos">5508</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
-</span><span id="Parser-5509"><a href="#Parser-5509"><span class="linenos">5509</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5510"><a href="#Parser-5510"><span class="linenos">5510</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5511"><a href="#Parser-5511"><span class="linenos">5511</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
-</span><span id="Parser-5512"><a href="#Parser-5512"><span class="linenos">5512</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">)</span>
-</span><span id="Parser-5513"><a href="#Parser-5513"><span class="linenos">5513</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">),</span>
-</span><span id="Parser-5514"><a href="#Parser-5514"><span class="linenos">5514</span></a> <span class="p">)</span>
-</span><span id="Parser-5515"><a href="#Parser-5515"><span class="linenos">5515</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">):</span>
-</span><span id="Parser-5516"><a href="#Parser-5516"><span class="linenos">5516</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Parser-5517"><a href="#Parser-5517"><span class="linenos">5517</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5518"><a href="#Parser-5518"><span class="linenos">5518</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5519"><a href="#Parser-5519"><span class="linenos">5519</span></a>
-</span><span id="Parser-5520"><a href="#Parser-5520"><span class="linenos">5520</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="Parser-5521"><a href="#Parser-5521"><span class="linenos">5521</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5522"><a href="#Parser-5522"><span class="linenos">5522</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
-</span><span id="Parser-5523"><a href="#Parser-5523"><span class="linenos">5523</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
-</span><span id="Parser-5524"><a href="#Parser-5524"><span class="linenos">5524</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
-</span><span id="Parser-5525"><a href="#Parser-5525"><span class="linenos">5525</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
-</span><span id="Parser-5526"><a href="#Parser-5526"><span class="linenos">5526</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
-</span><span id="Parser-5527"><a href="#Parser-5527"><span class="linenos">5527</span></a> <span class="p">)</span>
-</span><span id="Parser-5528"><a href="#Parser-5528"><span class="linenos">5528</span></a> <span class="p">)</span>
-</span><span id="Parser-5529"><a href="#Parser-5529"><span class="linenos">5529</span></a> <span class="k">return</span> <span class="n">whens</span>
-</span><span id="Parser-5530"><a href="#Parser-5530"><span class="linenos">5530</span></a>
-</span><span id="Parser-5531"><a href="#Parser-5531"><span class="linenos">5531</span></a> <span class="k">def</span> <span class="nf">_parse_show</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5532"><a href="#Parser-5532"><span class="linenos">5532</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SHOW_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SHOW_TRIE</span><span class="p">)</span>
-</span><span id="Parser-5533"><a href="#Parser-5533"><span class="linenos">5533</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
-</span><span id="Parser-5534"><a href="#Parser-5534"><span class="linenos">5534</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
-</span><span id="Parser-5535"><a href="#Parser-5535"><span class="linenos">5535</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5536"><a href="#Parser-5536"><span class="linenos">5536</span></a>
-</span><span id="Parser-5537"><a href="#Parser-5537"><span class="linenos">5537</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
-</span><span id="Parser-5538"><a href="#Parser-5538"><span class="linenos">5538</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5539"><a href="#Parser-5539"><span class="linenos">5539</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5540"><a href="#Parser-5540"><span class="linenos">5540</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-5541"><a href="#Parser-5541"><span class="linenos">5541</span></a>
-</span><span id="Parser-5542"><a href="#Parser-5542"><span class="linenos">5542</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;GLOBAL&quot;</span><span class="p">,</span> <span class="s2">&quot;SESSION&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">):</span>
-</span><span id="Parser-5543"><a href="#Parser-5543"><span class="linenos">5543</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_transaction</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">)</span>
-</span><span id="Parser-5544"><a href="#Parser-5544"><span class="linenos">5544</span></a>
-</span><span id="Parser-5545"><a href="#Parser-5545"><span class="linenos">5545</span></a> <span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-5546"><a href="#Parser-5546"><span class="linenos">5546</span></a> <span class="n">assignment_delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;=&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">))</span>
-</span><span id="Parser-5547"><a href="#Parser-5547"><span class="linenos">5547</span></a>
-</span><span id="Parser-5548"><a href="#Parser-5548"><span class="linenos">5548</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">left</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_REQUIRES_ASSIGNMENT_DELIMITER</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">assignment_delimiter</span><span class="p">):</span>
-</span><span id="Parser-5549"><a href="#Parser-5549"><span class="linenos">5549</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-5550"><a href="#Parser-5550"><span class="linenos">5550</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5551"><a href="#Parser-5551"><span class="linenos">5551</span></a>
-</span><span id="Parser-5552"><a href="#Parser-5552"><span class="linenos">5552</span></a> <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-5553"><a href="#Parser-5553"><span class="linenos">5553</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">)</span>
+</span><span id="Parser-5493"><a href="#Parser-5493"><span class="linenos">5493</span></a> <span class="k">def</span> <span class="nf">_parse_when_matched</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">]:</span>
+</span><span id="Parser-5494"><a href="#Parser-5494"><span class="linenos">5494</span></a> <span class="n">whens</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-5495"><a href="#Parser-5495"><span class="linenos">5495</span></a>
+</span><span id="Parser-5496"><a href="#Parser-5496"><span class="linenos">5496</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">WHEN</span><span class="p">):</span>
+</span><span id="Parser-5497"><a href="#Parser-5497"><span class="linenos">5497</span></a> <span class="n">matched</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">NOT</span><span class="p">)</span>
+</span><span id="Parser-5498"><a href="#Parser-5498"><span class="linenos">5498</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MATCHED&quot;</span><span class="p">)</span>
+</span><span id="Parser-5499"><a href="#Parser-5499"><span class="linenos">5499</span></a> <span class="n">source</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-5500"><a href="#Parser-5500"><span class="linenos">5500</span></a> <span class="kc">False</span>
+</span><span id="Parser-5501"><a href="#Parser-5501"><span class="linenos">5501</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;TARGET&quot;</span><span class="p">)</span>
+</span><span id="Parser-5502"><a href="#Parser-5502"><span class="linenos">5502</span></a> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;BY&quot;</span><span class="p">,</span> <span class="s2">&quot;SOURCE&quot;</span><span class="p">)</span>
+</span><span id="Parser-5503"><a href="#Parser-5503"><span class="linenos">5503</span></a> <span class="p">)</span>
+</span><span id="Parser-5504"><a href="#Parser-5504"><span class="linenos">5504</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">AND</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-5505"><a href="#Parser-5505"><span class="linenos">5505</span></a>
+</span><span id="Parser-5506"><a href="#Parser-5506"><span class="linenos">5506</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">THEN</span><span class="p">)</span>
+</span><span id="Parser-5507"><a href="#Parser-5507"><span class="linenos">5507</span></a>
+</span><span id="Parser-5508"><a href="#Parser-5508"><span class="linenos">5508</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">INSERT</span><span class="p">):</span>
+</span><span id="Parser-5509"><a href="#Parser-5509"><span class="linenos">5509</span></a> <span class="n">_this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="Parser-5510"><a href="#Parser-5510"><span class="linenos">5510</span></a> <span class="k">if</span> <span class="n">_this</span><span class="p">:</span>
+</span><span id="Parser-5511"><a href="#Parser-5511"><span class="linenos">5511</span></a> <span class="n">then</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">_this</span><span class="p">)</span>
+</span><span id="Parser-5512"><a href="#Parser-5512"><span class="linenos">5512</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5513"><a href="#Parser-5513"><span class="linenos">5513</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5514"><a href="#Parser-5514"><span class="linenos">5514</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Insert</span><span class="p">,</span>
+</span><span id="Parser-5515"><a href="#Parser-5515"><span class="linenos">5515</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
+</span><span id="Parser-5516"><a href="#Parser-5516"><span class="linenos">5516</span></a> <span class="n">expression</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">VALUES</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_value</span><span class="p">(),</span>
+</span><span id="Parser-5517"><a href="#Parser-5517"><span class="linenos">5517</span></a> <span class="p">)</span>
+</span><span id="Parser-5518"><a href="#Parser-5518"><span class="linenos">5518</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">UPDATE</span><span class="p">):</span>
+</span><span id="Parser-5519"><a href="#Parser-5519"><span class="linenos">5519</span></a> <span class="n">expressions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_star</span><span class="p">()</span>
+</span><span id="Parser-5520"><a href="#Parser-5520"><span class="linenos">5520</span></a> <span class="k">if</span> <span class="n">expressions</span><span class="p">:</span>
+</span><span id="Parser-5521"><a href="#Parser-5521"><span class="linenos">5521</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="n">expressions</span><span class="p">)</span>
+</span><span id="Parser-5522"><a href="#Parser-5522"><span class="linenos">5522</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5523"><a href="#Parser-5523"><span class="linenos">5523</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5524"><a href="#Parser-5524"><span class="linenos">5524</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Update</span><span class="p">,</span>
+</span><span id="Parser-5525"><a href="#Parser-5525"><span class="linenos">5525</span></a> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">SET</span><span class="p">)</span>
+</span><span id="Parser-5526"><a href="#Parser-5526"><span class="linenos">5526</span></a> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_equality</span><span class="p">),</span>
+</span><span id="Parser-5527"><a href="#Parser-5527"><span class="linenos">5527</span></a> <span class="p">)</span>
+</span><span id="Parser-5528"><a href="#Parser-5528"><span class="linenos">5528</span></a> <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">DELETE</span><span class="p">):</span>
+</span><span id="Parser-5529"><a href="#Parser-5529"><span class="linenos">5529</span></a> <span class="n">then</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-5530"><a href="#Parser-5530"><span class="linenos">5530</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5531"><a href="#Parser-5531"><span class="linenos">5531</span></a> <span class="n">then</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5532"><a href="#Parser-5532"><span class="linenos">5532</span></a>
+</span><span id="Parser-5533"><a href="#Parser-5533"><span class="linenos">5533</span></a> <span class="n">whens</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="Parser-5534"><a href="#Parser-5534"><span class="linenos">5534</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5535"><a href="#Parser-5535"><span class="linenos">5535</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">When</span><span class="p">,</span>
+</span><span id="Parser-5536"><a href="#Parser-5536"><span class="linenos">5536</span></a> <span class="n">matched</span><span class="o">=</span><span class="n">matched</span><span class="p">,</span>
+</span><span id="Parser-5537"><a href="#Parser-5537"><span class="linenos">5537</span></a> <span class="n">source</span><span class="o">=</span><span class="n">source</span><span class="p">,</span>
+</span><span id="Parser-5538"><a href="#Parser-5538"><span class="linenos">5538</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
+</span><span id="Parser-5539"><a href="#Parser-5539"><span class="linenos">5539</span></a> <span class="n">then</span><span class="o">=</span><span class="n">then</span><span class="p">,</span>
+</span><span id="Parser-5540"><a href="#Parser-5540"><span class="linenos">5540</span></a> <span class="p">)</span>
+</span><span id="Parser-5541"><a href="#Parser-5541"><span class="linenos">5541</span></a> <span class="p">)</span>
+</span><span id="Parser-5542"><a href="#Parser-5542"><span class="linenos">5542</span></a> <span class="k">return</span> <span class="n">whens</span>
+</span><span id="Parser-5543"><a href="#Parser-5543"><span class="linenos">5543</span></a>
+</span><span id="Parser-5544"><a href="#Parser-5544"><span class="linenos">5544</span></a> <span class="k">def</span> <span class="nf">_parse_show</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5545"><a href="#Parser-5545"><span class="linenos">5545</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SHOW_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SHOW_TRIE</span><span class="p">)</span>
+</span><span id="Parser-5546"><a href="#Parser-5546"><span class="linenos">5546</span></a> <span class="k">if</span> <span class="n">parser</span><span class="p">:</span>
+</span><span id="Parser-5547"><a href="#Parser-5547"><span class="linenos">5547</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+</span><span id="Parser-5548"><a href="#Parser-5548"><span class="linenos">5548</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5549"><a href="#Parser-5549"><span class="linenos">5549</span></a>
+</span><span id="Parser-5550"><a href="#Parser-5550"><span class="linenos">5550</span></a> <span class="k">def</span> <span class="nf">_parse_set_item_assignment</span><span class="p">(</span>
+</span><span id="Parser-5551"><a href="#Parser-5551"><span class="linenos">5551</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">kind</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+</span><span id="Parser-5552"><a href="#Parser-5552"><span class="linenos">5552</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5553"><a href="#Parser-5553"><span class="linenos">5553</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
</span><span id="Parser-5554"><a href="#Parser-5554"><span class="linenos">5554</span></a>
-</span><span id="Parser-5555"><a href="#Parser-5555"><span class="linenos">5555</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
-</span><span id="Parser-5556"><a href="#Parser-5556"><span class="linenos">5556</span></a>
-</span><span id="Parser-5557"><a href="#Parser-5557"><span class="linenos">5557</span></a> <span class="k">def</span> <span class="nf">_parse_set_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="Parser-5558"><a href="#Parser-5558"><span class="linenos">5558</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)</span>
-</span><span id="Parser-5559"><a href="#Parser-5559"><span class="linenos">5559</span></a> <span class="n">characteristics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
-</span><span id="Parser-5560"><a href="#Parser-5560"><span class="linenos">5560</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_CHARACTERISTICS</span><span class="p">)</span>
-</span><span id="Parser-5561"><a href="#Parser-5561"><span class="linenos">5561</span></a> <span class="p">)</span>
-</span><span id="Parser-5562"><a href="#Parser-5562"><span class="linenos">5562</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5563"><a href="#Parser-5563"><span class="linenos">5563</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
-</span><span id="Parser-5564"><a href="#Parser-5564"><span class="linenos">5564</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
-</span><span id="Parser-5565"><a href="#Parser-5565"><span class="linenos">5565</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span>
-</span><span id="Parser-5566"><a href="#Parser-5566"><span class="linenos">5566</span></a> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="n">global_</span><span class="p">},</span> <span class="c1"># type: ignore</span>
-</span><span id="Parser-5567"><a href="#Parser-5567"><span class="linenos">5567</span></a> <span class="p">)</span>
-</span><span id="Parser-5568"><a href="#Parser-5568"><span class="linenos">5568</span></a>
-</span><span id="Parser-5569"><a href="#Parser-5569"><span class="linenos">5569</span></a> <span class="k">def</span> <span class="nf">_parse_set_item</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5570"><a href="#Parser-5570"><span class="linenos">5570</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_TRIE</span><span class="p">)</span>
-</span><span id="Parser-5571"><a href="#Parser-5571"><span class="linenos">5571</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">if</span> <span class="n">parser</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="Parser-5572"><a href="#Parser-5572"><span class="linenos">5572</span></a>
-</span><span id="Parser-5573"><a href="#Parser-5573"><span class="linenos">5573</span></a> <span class="k">def</span> <span class="nf">_parse_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unset</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">tag</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="Parser-5574"><a href="#Parser-5574"><span class="linenos">5574</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-5575"><a href="#Parser-5575"><span class="linenos">5575</span></a> <span class="n">set_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5576"><a href="#Parser-5576"><span class="linenos">5576</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item</span><span class="p">),</span> <span class="n">unset</span><span class="o">=</span><span class="n">unset</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag</span>
-</span><span id="Parser-5577"><a href="#Parser-5577"><span class="linenos">5577</span></a> <span class="p">)</span>
-</span><span id="Parser-5578"><a href="#Parser-5578"><span class="linenos">5578</span></a>
-</span><span id="Parser-5579"><a href="#Parser-5579"><span class="linenos">5579</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-5580"><a href="#Parser-5580"><span class="linenos">5580</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-5581"><a href="#Parser-5581"><span class="linenos">5581</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5582"><a href="#Parser-5582"><span class="linenos">5582</span></a>
-</span><span id="Parser-5583"><a href="#Parser-5583"><span class="linenos">5583</span></a> <span class="k">return</span> <span class="n">set_</span>
-</span><span id="Parser-5584"><a href="#Parser-5584"><span class="linenos">5584</span></a>
-</span><span id="Parser-5585"><a href="#Parser-5585"><span class="linenos">5585</span></a> <span class="k">def</span> <span class="nf">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">]:</span>
-</span><span id="Parser-5586"><a href="#Parser-5586"><span class="linenos">5586</span></a> <span class="k">for</span> <span class="n">option</span> <span class="ow">in</span> <span class="n">options</span><span class="p">:</span>
-</span><span id="Parser-5587"><a href="#Parser-5587"><span class="linenos">5587</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="o">*</span><span class="n">option</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)):</span>
-</span><span id="Parser-5588"><a href="#Parser-5588"><span class="linenos">5588</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
-</span><span id="Parser-5589"><a href="#Parser-5589"><span class="linenos">5589</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5590"><a href="#Parser-5590"><span class="linenos">5590</span></a>
-</span><span id="Parser-5591"><a href="#Parser-5591"><span class="linenos">5591</span></a> <span class="k">def</span> <span class="nf">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
-</span><span id="Parser-5592"><a href="#Parser-5592"><span class="linenos">5592</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-5593"><a href="#Parser-5593"><span class="linenos">5593</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5594"><a href="#Parser-5594"><span class="linenos">5594</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5595"><a href="#Parser-5595"><span class="linenos">5595</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Parser-5596"><a href="#Parser-5596"><span class="linenos">5596</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_warn_unsupported</span><span class="p">()</span>
-</span><span id="Parser-5597"><a href="#Parser-5597"><span class="linenos">5597</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">text</span><span class="p">[:</span><span class="n">size</span><span class="p">],</span> <span class="n">expression</span><span class="o">=</span><span class="n">text</span><span class="p">[</span><span class="n">size</span><span class="p">:])</span>
-</span><span id="Parser-5598"><a href="#Parser-5598"><span class="linenos">5598</span></a>
-</span><span id="Parser-5599"><a href="#Parser-5599"><span class="linenos">5599</span></a> <span class="k">def</span> <span class="nf">_parse_dict_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span>
-</span><span id="Parser-5600"><a href="#Parser-5600"><span class="linenos">5600</span></a> <span class="n">settings</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-5601"><a href="#Parser-5601"><span class="linenos">5601</span></a>
-</span><span id="Parser-5602"><a href="#Parser-5602"><span class="linenos">5602</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="Parser-5603"><a href="#Parser-5603"><span class="linenos">5603</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-5604"><a href="#Parser-5604"><span class="linenos">5604</span></a>
-</span><span id="Parser-5605"><a href="#Parser-5605"><span class="linenos">5605</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
-</span><span id="Parser-5606"><a href="#Parser-5606"><span class="linenos">5606</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-5607"><a href="#Parser-5607"><span class="linenos">5607</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
-</span><span id="Parser-5608"><a href="#Parser-5608"><span class="linenos">5608</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-5609"><a href="#Parser-5609"><span class="linenos">5609</span></a>
-</span><span id="Parser-5610"><a href="#Parser-5610"><span class="linenos">5610</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-5611"><a href="#Parser-5611"><span class="linenos">5611</span></a> <span class="k">break</span>
-</span><span id="Parser-5612"><a href="#Parser-5612"><span class="linenos">5612</span></a> <span class="n">settings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">))</span>
-</span><span id="Parser-5613"><a href="#Parser-5613"><span class="linenos">5613</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span>
+</span><span id="Parser-5555"><a href="#Parser-5555"><span class="linenos">5555</span></a> <span class="k">if</span> <span class="n">kind</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;GLOBAL&quot;</span><span class="p">,</span> <span class="s2">&quot;SESSION&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">):</span>
+</span><span id="Parser-5556"><a href="#Parser-5556"><span class="linenos">5556</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_transaction</span><span class="p">(</span><span class="n">global_</span><span class="o">=</span><span class="n">kind</span> <span class="o">==</span> <span class="s2">&quot;GLOBAL&quot;</span><span class="p">)</span>
+</span><span id="Parser-5557"><a href="#Parser-5557"><span class="linenos">5557</span></a>
+</span><span id="Parser-5558"><a href="#Parser-5558"><span class="linenos">5558</span></a> <span class="n">left</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-5559"><a href="#Parser-5559"><span class="linenos">5559</span></a> <span class="n">assignment_delimiter</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_texts</span><span class="p">((</span><span class="s2">&quot;=&quot;</span><span class="p">,</span> <span class="s2">&quot;TO&quot;</span><span class="p">))</span>
+</span><span id="Parser-5560"><a href="#Parser-5560"><span class="linenos">5560</span></a>
+</span><span id="Parser-5561"><a href="#Parser-5561"><span class="linenos">5561</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">left</span> <span class="ow">or</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_REQUIRES_ASSIGNMENT_DELIMITER</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">assignment_delimiter</span><span class="p">):</span>
+</span><span id="Parser-5562"><a href="#Parser-5562"><span class="linenos">5562</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-5563"><a href="#Parser-5563"><span class="linenos">5563</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5564"><a href="#Parser-5564"><span class="linenos">5564</span></a>
+</span><span id="Parser-5565"><a href="#Parser-5565"><span class="linenos">5565</span></a> <span class="n">right</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_statement</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-5566"><a href="#Parser-5566"><span class="linenos">5566</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">EQ</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">left</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">right</span><span class="p">)</span>
+</span><span id="Parser-5567"><a href="#Parser-5567"><span class="linenos">5567</span></a>
+</span><span id="Parser-5568"><a href="#Parser-5568"><span class="linenos">5568</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="p">)</span>
+</span><span id="Parser-5569"><a href="#Parser-5569"><span class="linenos">5569</span></a>
+</span><span id="Parser-5570"><a href="#Parser-5570"><span class="linenos">5570</span></a> <span class="k">def</span> <span class="nf">_parse_set_transaction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">global_</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="Parser-5571"><a href="#Parser-5571"><span class="linenos">5571</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">)</span>
+</span><span id="Parser-5572"><a href="#Parser-5572"><span class="linenos">5572</span></a> <span class="n">characteristics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span>
+</span><span id="Parser-5573"><a href="#Parser-5573"><span class="linenos">5573</span></a> <span class="k">lambda</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">TRANSACTION_CHARACTERISTICS</span><span class="p">)</span>
+</span><span id="Parser-5574"><a href="#Parser-5574"><span class="linenos">5574</span></a> <span class="p">)</span>
+</span><span id="Parser-5575"><a href="#Parser-5575"><span class="linenos">5575</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5576"><a href="#Parser-5576"><span class="linenos">5576</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SetItem</span><span class="p">,</span>
+</span><span id="Parser-5577"><a href="#Parser-5577"><span class="linenos">5577</span></a> <span class="n">expressions</span><span class="o">=</span><span class="n">characteristics</span><span class="p">,</span>
+</span><span id="Parser-5578"><a href="#Parser-5578"><span class="linenos">5578</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;TRANSACTION&quot;</span><span class="p">,</span>
+</span><span id="Parser-5579"><a href="#Parser-5579"><span class="linenos">5579</span></a> <span class="o">**</span><span class="p">{</span><span class="s2">&quot;global&quot;</span><span class="p">:</span> <span class="n">global_</span><span class="p">},</span> <span class="c1"># type: ignore</span>
+</span><span id="Parser-5580"><a href="#Parser-5580"><span class="linenos">5580</span></a> <span class="p">)</span>
+</span><span id="Parser-5581"><a href="#Parser-5581"><span class="linenos">5581</span></a>
+</span><span id="Parser-5582"><a href="#Parser-5582"><span class="linenos">5582</span></a> <span class="k">def</span> <span class="nf">_parse_set_item</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5583"><a href="#Parser-5583"><span class="linenos">5583</span></a> <span class="n">parser</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_parser</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">SET_PARSERS</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">SET_TRIE</span><span class="p">)</span>
+</span><span id="Parser-5584"><a href="#Parser-5584"><span class="linenos">5584</span></a> <span class="k">return</span> <span class="n">parser</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">if</span> <span class="n">parser</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item_assignment</span><span class="p">(</span><span class="n">kind</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="Parser-5585"><a href="#Parser-5585"><span class="linenos">5585</span></a>
+</span><span id="Parser-5586"><a href="#Parser-5586"><span class="linenos">5586</span></a> <span class="k">def</span> <span class="nf">_parse_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">unset</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">tag</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="Parser-5587"><a href="#Parser-5587"><span class="linenos">5587</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-5588"><a href="#Parser-5588"><span class="linenos">5588</span></a> <span class="n">set_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5589"><a href="#Parser-5589"><span class="linenos">5589</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Set</span><span class="p">,</span> <span class="n">expressions</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_csv</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_set_item</span><span class="p">),</span> <span class="n">unset</span><span class="o">=</span><span class="n">unset</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag</span>
+</span><span id="Parser-5590"><a href="#Parser-5590"><span class="linenos">5590</span></a> <span class="p">)</span>
+</span><span id="Parser-5591"><a href="#Parser-5591"><span class="linenos">5591</span></a>
+</span><span id="Parser-5592"><a href="#Parser-5592"><span class="linenos">5592</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-5593"><a href="#Parser-5593"><span class="linenos">5593</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-5594"><a href="#Parser-5594"><span class="linenos">5594</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5595"><a href="#Parser-5595"><span class="linenos">5595</span></a>
+</span><span id="Parser-5596"><a href="#Parser-5596"><span class="linenos">5596</span></a> <span class="k">return</span> <span class="n">set_</span>
+</span><span id="Parser-5597"><a href="#Parser-5597"><span class="linenos">5597</span></a>
+</span><span id="Parser-5598"><a href="#Parser-5598"><span class="linenos">5598</span></a> <span class="k">def</span> <span class="nf">_parse_var_from_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Collection</span><span class="p">[</span><span class="nb">str</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">]:</span>
+</span><span id="Parser-5599"><a href="#Parser-5599"><span class="linenos">5599</span></a> <span class="k">for</span> <span class="n">option</span> <span class="ow">in</span> <span class="n">options</span><span class="p">:</span>
+</span><span id="Parser-5600"><a href="#Parser-5600"><span class="linenos">5600</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="o">*</span><span class="n">option</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)):</span>
+</span><span id="Parser-5601"><a href="#Parser-5601"><span class="linenos">5601</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
+</span><span id="Parser-5602"><a href="#Parser-5602"><span class="linenos">5602</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5603"><a href="#Parser-5603"><span class="linenos">5603</span></a>
+</span><span id="Parser-5604"><a href="#Parser-5604"><span class="linenos">5604</span></a> <span class="k">def</span> <span class="nf">_parse_as_command</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start</span><span class="p">:</span> <span class="n">Token</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">:</span>
+</span><span id="Parser-5605"><a href="#Parser-5605"><span class="linenos">5605</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-5606"><a href="#Parser-5606"><span class="linenos">5606</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5607"><a href="#Parser-5607"><span class="linenos">5607</span></a> <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5608"><a href="#Parser-5608"><span class="linenos">5608</span></a> <span class="n">size</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">start</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-5609"><a href="#Parser-5609"><span class="linenos">5609</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_warn_unsupported</span><span class="p">()</span>
+</span><span id="Parser-5610"><a href="#Parser-5610"><span class="linenos">5610</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">Command</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">text</span><span class="p">[:</span><span class="n">size</span><span class="p">],</span> <span class="n">expression</span><span class="o">=</span><span class="n">text</span><span class="p">[</span><span class="n">size</span><span class="p">:])</span>
+</span><span id="Parser-5611"><a href="#Parser-5611"><span class="linenos">5611</span></a>
+</span><span id="Parser-5612"><a href="#Parser-5612"><span class="linenos">5612</span></a> <span class="k">def</span> <span class="nf">_parse_dict_property</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">:</span>
+</span><span id="Parser-5613"><a href="#Parser-5613"><span class="linenos">5613</span></a> <span class="n">settings</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Parser-5614"><a href="#Parser-5614"><span class="linenos">5614</span></a>
-</span><span id="Parser-5615"><a href="#Parser-5615"><span class="linenos">5615</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-5616"><a href="#Parser-5616"><span class="linenos">5616</span></a>
-</span><span id="Parser-5617"><a href="#Parser-5617"><span class="linenos">5617</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5618"><a href="#Parser-5618"><span class="linenos">5618</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">,</span>
-</span><span id="Parser-5619"><a href="#Parser-5619"><span class="linenos">5619</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-5620"><a href="#Parser-5620"><span class="linenos">5620</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="Parser-5621"><a href="#Parser-5621"><span class="linenos">5621</span></a> <span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span>
-</span><span id="Parser-5622"><a href="#Parser-5622"><span class="linenos">5622</span></a> <span class="p">)</span>
-</span><span id="Parser-5623"><a href="#Parser-5623"><span class="linenos">5623</span></a>
-</span><span id="Parser-5624"><a href="#Parser-5624"><span class="linenos">5624</span></a> <span class="k">def</span> <span class="nf">_parse_dict_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span>
-</span><span id="Parser-5625"><a href="#Parser-5625"><span class="linenos">5625</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
-</span><span id="Parser-5626"><a href="#Parser-5626"><span class="linenos">5626</span></a> <span class="n">has_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)</span>
-</span><span id="Parser-5627"><a href="#Parser-5627"><span class="linenos">5627</span></a> <span class="k">if</span> <span class="n">has_min</span><span class="p">:</span>
-</span><span id="Parser-5628"><a href="#Parser-5628"><span class="linenos">5628</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-5629"><a href="#Parser-5629"><span class="linenos">5629</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
-</span><span id="Parser-5630"><a href="#Parser-5630"><span class="linenos">5630</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-5631"><a href="#Parser-5631"><span class="linenos">5631</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5632"><a href="#Parser-5632"><span class="linenos">5632</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
-</span><span id="Parser-5633"><a href="#Parser-5633"><span class="linenos">5633</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
-</span><span id="Parser-5634"><a href="#Parser-5634"><span class="linenos">5634</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
-</span><span id="Parser-5635"><a href="#Parser-5635"><span class="linenos">5635</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span><span class="p">)</span>
+</span><span id="Parser-5615"><a href="#Parser-5615"><span class="linenos">5615</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="Parser-5616"><a href="#Parser-5616"><span class="linenos">5616</span></a> <span class="n">kind</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-5617"><a href="#Parser-5617"><span class="linenos">5617</span></a>
+</span><span id="Parser-5618"><a href="#Parser-5618"><span class="linenos">5618</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">):</span>
+</span><span id="Parser-5619"><a href="#Parser-5619"><span class="linenos">5619</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-5620"><a href="#Parser-5620"><span class="linenos">5620</span></a> <span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_id_var</span><span class="p">()</span>
+</span><span id="Parser-5621"><a href="#Parser-5621"><span class="linenos">5621</span></a> <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-5622"><a href="#Parser-5622"><span class="linenos">5622</span></a>
+</span><span id="Parser-5623"><a href="#Parser-5623"><span class="linenos">5623</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-5624"><a href="#Parser-5624"><span class="linenos">5624</span></a> <span class="k">break</span>
+</span><span id="Parser-5625"><a href="#Parser-5625"><span class="linenos">5625</span></a> <span class="n">settings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictSubProperty</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">value</span><span class="p">))</span>
+</span><span id="Parser-5626"><a href="#Parser-5626"><span class="linenos">5626</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">)</span>
+</span><span id="Parser-5627"><a href="#Parser-5627"><span class="linenos">5627</span></a>
+</span><span id="Parser-5628"><a href="#Parser-5628"><span class="linenos">5628</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-5629"><a href="#Parser-5629"><span class="linenos">5629</span></a>
+</span><span id="Parser-5630"><a href="#Parser-5630"><span class="linenos">5630</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5631"><a href="#Parser-5631"><span class="linenos">5631</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DictProperty</span><span class="p">,</span>
+</span><span id="Parser-5632"><a href="#Parser-5632"><span class="linenos">5632</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-5633"><a href="#Parser-5633"><span class="linenos">5633</span></a> <span class="n">kind</span><span class="o">=</span><span class="n">kind</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="n">kind</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="Parser-5634"><a href="#Parser-5634"><span class="linenos">5634</span></a> <span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span>
+</span><span id="Parser-5635"><a href="#Parser-5635"><span class="linenos">5635</span></a> <span class="p">)</span>
</span><span id="Parser-5636"><a href="#Parser-5636"><span class="linenos">5636</span></a>
-</span><span id="Parser-5637"><a href="#Parser-5637"><span class="linenos">5637</span></a> <span class="k">def</span> <span class="nf">_parse_comprehension</span><span class="p">(</span>
-</span><span id="Parser-5638"><a href="#Parser-5638"><span class="linenos">5638</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="Parser-5639"><a href="#Parser-5639"><span class="linenos">5639</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">]:</span>
-</span><span id="Parser-5640"><a href="#Parser-5640"><span class="linenos">5640</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-5641"><a href="#Parser-5641"><span class="linenos">5641</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-5642"><a href="#Parser-5642"><span class="linenos">5642</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
-</span><span id="Parser-5643"><a href="#Parser-5643"><span class="linenos">5643</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="Parser-5644"><a href="#Parser-5644"><span class="linenos">5644</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5645"><a href="#Parser-5645"><span class="linenos">5645</span></a> <span class="n">iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
-</span><span id="Parser-5646"><a href="#Parser-5646"><span class="linenos">5646</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
-</span><span id="Parser-5647"><a href="#Parser-5647"><span class="linenos">5647</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
-</span><span id="Parser-5648"><a href="#Parser-5648"><span class="linenos">5648</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">,</span>
-</span><span id="Parser-5649"><a href="#Parser-5649"><span class="linenos">5649</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
-</span><span id="Parser-5650"><a href="#Parser-5650"><span class="linenos">5650</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
-</span><span id="Parser-5651"><a href="#Parser-5651"><span class="linenos">5651</span></a> <span class="n">iterator</span><span class="o">=</span><span class="n">iterator</span><span class="p">,</span>
-</span><span id="Parser-5652"><a href="#Parser-5652"><span class="linenos">5652</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
-</span><span id="Parser-5653"><a href="#Parser-5653"><span class="linenos">5653</span></a> <span class="p">)</span>
-</span><span id="Parser-5654"><a href="#Parser-5654"><span class="linenos">5654</span></a>
-</span><span id="Parser-5655"><a href="#Parser-5655"><span class="linenos">5655</span></a> <span class="k">def</span> <span class="nf">_parse_heredoc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">]:</span>
-</span><span id="Parser-5656"><a href="#Parser-5656"><span class="linenos">5656</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">):</span>
-</span><span id="Parser-5657"><a href="#Parser-5657"><span class="linenos">5657</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
-</span><span id="Parser-5658"><a href="#Parser-5658"><span class="linenos">5658</span></a>
-</span><span id="Parser-5659"><a href="#Parser-5659"><span class="linenos">5659</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">):</span>
-</span><span id="Parser-5660"><a href="#Parser-5660"><span class="linenos">5660</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5661"><a href="#Parser-5661"><span class="linenos">5661</span></a>
-</span><span id="Parser-5662"><a href="#Parser-5662"><span class="linenos">5662</span></a> <span class="n">tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
-</span><span id="Parser-5663"><a href="#Parser-5663"><span class="linenos">5663</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="kc">None</span>
-</span><span id="Parser-5664"><a href="#Parser-5664"><span class="linenos">5664</span></a>
-</span><span id="Parser-5665"><a href="#Parser-5665"><span class="linenos">5665</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">():</span>
-</span><span id="Parser-5666"><a href="#Parser-5666"><span class="linenos">5666</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5667"><a href="#Parser-5667"><span class="linenos">5667</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
-</span><span id="Parser-5668"><a href="#Parser-5668"><span class="linenos">5668</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5669"><a href="#Parser-5669"><span class="linenos">5669</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;No closing $ found&quot;</span><span class="p">)</span>
-</span><span id="Parser-5670"><a href="#Parser-5670"><span class="linenos">5670</span></a>
-</span><span id="Parser-5671"><a href="#Parser-5671"><span class="linenos">5671</span></a> <span class="k">if</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;$&quot;</span><span class="p">:</span>
-</span><span id="Parser-5672"><a href="#Parser-5672"><span class="linenos">5672</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">):</span>
-</span><span id="Parser-5673"><a href="#Parser-5673"><span class="linenos">5673</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
-</span><span id="Parser-5674"><a href="#Parser-5674"><span class="linenos">5674</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">)</span>
-</span><span id="Parser-5675"><a href="#Parser-5675"><span class="linenos">5675</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5676"><a href="#Parser-5676"><span class="linenos">5676</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;No closing $ found&quot;</span><span class="p">)</span>
+</span><span id="Parser-5637"><a href="#Parser-5637"><span class="linenos">5637</span></a> <span class="k">def</span> <span class="nf">_parse_dict_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">:</span>
+</span><span id="Parser-5638"><a href="#Parser-5638"><span class="linenos">5638</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_l_paren</span><span class="p">()</span>
+</span><span id="Parser-5639"><a href="#Parser-5639"><span class="linenos">5639</span></a> <span class="n">has_min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MIN&quot;</span><span class="p">)</span>
+</span><span id="Parser-5640"><a href="#Parser-5640"><span class="linenos">5640</span></a> <span class="k">if</span> <span class="n">has_min</span><span class="p">:</span>
+</span><span id="Parser-5641"><a href="#Parser-5641"><span class="linenos">5641</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-5642"><a href="#Parser-5642"><span class="linenos">5642</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
+</span><span id="Parser-5643"><a href="#Parser-5643"><span class="linenos">5643</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-5644"><a href="#Parser-5644"><span class="linenos">5644</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5645"><a href="#Parser-5645"><span class="linenos">5645</span></a> <span class="nb">max</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_var</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_primary</span><span class="p">()</span>
+</span><span id="Parser-5646"><a href="#Parser-5646"><span class="linenos">5646</span></a> <span class="nb">min</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+</span><span id="Parser-5647"><a href="#Parser-5647"><span class="linenos">5647</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_match_r_paren</span><span class="p">()</span>
+</span><span id="Parser-5648"><a href="#Parser-5648"><span class="linenos">5648</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DictRange</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="nb">max</span><span class="p">)</span>
+</span><span id="Parser-5649"><a href="#Parser-5649"><span class="linenos">5649</span></a>
+</span><span id="Parser-5650"><a href="#Parser-5650"><span class="linenos">5650</span></a> <span class="k">def</span> <span class="nf">_parse_comprehension</span><span class="p">(</span>
+</span><span id="Parser-5651"><a href="#Parser-5651"><span class="linenos">5651</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="Parser-5652"><a href="#Parser-5652"><span class="linenos">5652</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">]:</span>
+</span><span id="Parser-5653"><a href="#Parser-5653"><span class="linenos">5653</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-5654"><a href="#Parser-5654"><span class="linenos">5654</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-5655"><a href="#Parser-5655"><span class="linenos">5655</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">IN</span><span class="p">):</span>
+</span><span id="Parser-5656"><a href="#Parser-5656"><span class="linenos">5656</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="Parser-5657"><a href="#Parser-5657"><span class="linenos">5657</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5658"><a href="#Parser-5658"><span class="linenos">5658</span></a> <span class="n">iterator</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_column</span><span class="p">()</span>
+</span><span id="Parser-5659"><a href="#Parser-5659"><span class="linenos">5659</span></a> <span class="n">condition</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;IF&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
+</span><span id="Parser-5660"><a href="#Parser-5660"><span class="linenos">5660</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
+</span><span id="Parser-5661"><a href="#Parser-5661"><span class="linenos">5661</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Comprehension</span><span class="p">,</span>
+</span><span id="Parser-5662"><a href="#Parser-5662"><span class="linenos">5662</span></a> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span>
+</span><span id="Parser-5663"><a href="#Parser-5663"><span class="linenos">5663</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">,</span>
+</span><span id="Parser-5664"><a href="#Parser-5664"><span class="linenos">5664</span></a> <span class="n">iterator</span><span class="o">=</span><span class="n">iterator</span><span class="p">,</span>
+</span><span id="Parser-5665"><a href="#Parser-5665"><span class="linenos">5665</span></a> <span class="n">condition</span><span class="o">=</span><span class="n">condition</span><span class="p">,</span>
+</span><span id="Parser-5666"><a href="#Parser-5666"><span class="linenos">5666</span></a> <span class="p">)</span>
+</span><span id="Parser-5667"><a href="#Parser-5667"><span class="linenos">5667</span></a>
+</span><span id="Parser-5668"><a href="#Parser-5668"><span class="linenos">5668</span></a> <span class="k">def</span> <span class="nf">_parse_heredoc</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">]:</span>
+</span><span id="Parser-5669"><a href="#Parser-5669"><span class="linenos">5669</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">HEREDOC_STRING</span><span class="p">):</span>
+</span><span id="Parser-5670"><a href="#Parser-5670"><span class="linenos">5670</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+</span><span id="Parser-5671"><a href="#Parser-5671"><span class="linenos">5671</span></a>
+</span><span id="Parser-5672"><a href="#Parser-5672"><span class="linenos">5672</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">):</span>
+</span><span id="Parser-5673"><a href="#Parser-5673"><span class="linenos">5673</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5674"><a href="#Parser-5674"><span class="linenos">5674</span></a>
+</span><span id="Parser-5675"><a href="#Parser-5675"><span class="linenos">5675</span></a> <span class="n">tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;$&quot;</span><span class="p">]</span>
+</span><span id="Parser-5676"><a href="#Parser-5676"><span class="linenos">5676</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="Parser-5677"><a href="#Parser-5677"><span class="linenos">5677</span></a>
-</span><span id="Parser-5678"><a href="#Parser-5678"><span class="linenos">5678</span></a> <span class="n">heredoc_start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
-</span><span id="Parser-5679"><a href="#Parser-5679"><span class="linenos">5679</span></a>
-</span><span id="Parser-5680"><a href="#Parser-5680"><span class="linenos">5680</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-5681"><a href="#Parser-5681"><span class="linenos">5681</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="Parser-5682"><a href="#Parser-5682"><span class="linenos">5682</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">heredoc_start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
-</span><span id="Parser-5683"><a href="#Parser-5683"><span class="linenos">5683</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">tags</span><span class="p">))</span>
-</span><span id="Parser-5684"><a href="#Parser-5684"><span class="linenos">5684</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag_text</span><span class="p">)</span>
-</span><span id="Parser-5685"><a href="#Parser-5685"><span class="linenos">5685</span></a>
-</span><span id="Parser-5686"><a href="#Parser-5686"><span class="linenos">5686</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5687"><a href="#Parser-5687"><span class="linenos">5687</span></a>
-</span><span id="Parser-5688"><a href="#Parser-5688"><span class="linenos">5688</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No closing </span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span><span class="si">}</span><span class="s2"> found&quot;</span><span class="p">)</span>
-</span><span id="Parser-5689"><a href="#Parser-5689"><span class="linenos">5689</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5678"><a href="#Parser-5678"><span class="linenos">5678</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">():</span>
+</span><span id="Parser-5679"><a href="#Parser-5679"><span class="linenos">5679</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5680"><a href="#Parser-5680"><span class="linenos">5680</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">())</span>
+</span><span id="Parser-5681"><a href="#Parser-5681"><span class="linenos">5681</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5682"><a href="#Parser-5682"><span class="linenos">5682</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;No closing $ found&quot;</span><span class="p">)</span>
+</span><span id="Parser-5683"><a href="#Parser-5683"><span class="linenos">5683</span></a>
+</span><span id="Parser-5684"><a href="#Parser-5684"><span class="linenos">5684</span></a> <span class="k">if</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">&quot;$&quot;</span><span class="p">:</span>
+</span><span id="Parser-5685"><a href="#Parser-5685"><span class="linenos">5685</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_is_connected</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">):</span>
+</span><span id="Parser-5686"><a href="#Parser-5686"><span class="linenos">5686</span></a> <span class="n">tag_text</span> <span class="o">=</span> <span class="n">tags</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
+</span><span id="Parser-5687"><a href="#Parser-5687"><span class="linenos">5687</span></a> <span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;$&quot;</span><span class="p">)</span>
+</span><span id="Parser-5688"><a href="#Parser-5688"><span class="linenos">5688</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5689"><a href="#Parser-5689"><span class="linenos">5689</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;No closing $ found&quot;</span><span class="p">)</span>
</span><span id="Parser-5690"><a href="#Parser-5690"><span class="linenos">5690</span></a>
-</span><span id="Parser-5691"><a href="#Parser-5691"><span class="linenos">5691</span></a> <span class="k">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
-</span><span id="Parser-5692"><a href="#Parser-5692"><span class="linenos">5692</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parsers</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">],</span> <span class="n">trie</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
-</span><span id="Parser-5693"><a href="#Parser-5693"><span class="linenos">5693</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]:</span>
-</span><span id="Parser-5694"><a href="#Parser-5694"><span class="linenos">5694</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-5695"><a href="#Parser-5695"><span class="linenos">5695</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5696"><a href="#Parser-5696"><span class="linenos">5696</span></a>
-</span><span id="Parser-5697"><a href="#Parser-5697"><span class="linenos">5697</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-5698"><a href="#Parser-5698"><span class="linenos">5698</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Parser-5699"><a href="#Parser-5699"><span class="linenos">5699</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
-</span><span id="Parser-5700"><a href="#Parser-5700"><span class="linenos">5700</span></a> <span class="c1"># The current token might be multiple words</span>
-</span><span id="Parser-5701"><a href="#Parser-5701"><span class="linenos">5701</span></a> <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
-</span><span id="Parser-5702"><a href="#Parser-5702"><span class="linenos">5702</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
-</span><span id="Parser-5703"><a href="#Parser-5703"><span class="linenos">5703</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">curr</span><span class="p">)</span>
-</span><span id="Parser-5704"><a href="#Parser-5704"><span class="linenos">5704</span></a>
-</span><span id="Parser-5705"><a href="#Parser-5705"><span class="linenos">5705</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5706"><a href="#Parser-5706"><span class="linenos">5706</span></a> <span class="n">result</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
-</span><span id="Parser-5707"><a href="#Parser-5707"><span class="linenos">5707</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
-</span><span id="Parser-5708"><a href="#Parser-5708"><span class="linenos">5708</span></a> <span class="k">break</span>
+</span><span id="Parser-5691"><a href="#Parser-5691"><span class="linenos">5691</span></a> <span class="n">heredoc_start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span>
+</span><span id="Parser-5692"><a href="#Parser-5692"><span class="linenos">5692</span></a>
+</span><span id="Parser-5693"><a href="#Parser-5693"><span class="linenos">5693</span></a> <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-5694"><a href="#Parser-5694"><span class="linenos">5694</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="o">*</span><span class="n">tags</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="Parser-5695"><a href="#Parser-5695"><span class="linenos">5695</span></a> <span class="n">this</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_sql</span><span class="p">(</span><span class="n">heredoc_start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_prev</span><span class="p">)</span>
+</span><span id="Parser-5696"><a href="#Parser-5696"><span class="linenos">5696</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">tags</span><span class="p">))</span>
+</span><span id="Parser-5697"><a href="#Parser-5697"><span class="linenos">5697</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Heredoc</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="p">,</span> <span class="n">tag</span><span class="o">=</span><span class="n">tag_text</span><span class="p">)</span>
+</span><span id="Parser-5698"><a href="#Parser-5698"><span class="linenos">5698</span></a>
+</span><span id="Parser-5699"><a href="#Parser-5699"><span class="linenos">5699</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5700"><a href="#Parser-5700"><span class="linenos">5700</span></a>
+</span><span id="Parser-5701"><a href="#Parser-5701"><span class="linenos">5701</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No closing </span><span class="si">{</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span><span class="si">}</span><span class="s2"> found&quot;</span><span class="p">)</span>
+</span><span id="Parser-5702"><a href="#Parser-5702"><span class="linenos">5702</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5703"><a href="#Parser-5703"><span class="linenos">5703</span></a>
+</span><span id="Parser-5704"><a href="#Parser-5704"><span class="linenos">5704</span></a> <span class="k">def</span> <span class="nf">_find_parser</span><span class="p">(</span>
+</span><span id="Parser-5705"><a href="#Parser-5705"><span class="linenos">5705</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">parsers</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">],</span> <span class="n">trie</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Dict</span>
+</span><span id="Parser-5706"><a href="#Parser-5706"><span class="linenos">5706</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">t</span><span class="o">.</span><span class="n">Callable</span><span class="p">]:</span>
+</span><span id="Parser-5707"><a href="#Parser-5707"><span class="linenos">5707</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-5708"><a href="#Parser-5708"><span class="linenos">5708</span></a> <span class="k">return</span> <span class="kc">None</span>
</span><span id="Parser-5709"><a href="#Parser-5709"><span class="linenos">5709</span></a>
-</span><span id="Parser-5710"><a href="#Parser-5710"><span class="linenos">5710</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
-</span><span id="Parser-5711"><a href="#Parser-5711"><span class="linenos">5711</span></a> <span class="n">subparser</span> <span class="o">=</span> <span class="n">parsers</span><span class="p">[</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">this</span><span class="p">)]</span>
-</span><span id="Parser-5712"><a href="#Parser-5712"><span class="linenos">5712</span></a> <span class="k">return</span> <span class="n">subparser</span>
-</span><span id="Parser-5713"><a href="#Parser-5713"><span class="linenos">5713</span></a>
-</span><span id="Parser-5714"><a href="#Parser-5714"><span class="linenos">5714</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-5715"><a href="#Parser-5715"><span class="linenos">5715</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5716"><a href="#Parser-5716"><span class="linenos">5716</span></a>
-</span><span id="Parser-5717"><a href="#Parser-5717"><span class="linenos">5717</span></a> <span class="k">def</span> <span class="nf">_match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="Parser-5718"><a href="#Parser-5718"><span class="linenos">5718</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-5719"><a href="#Parser-5719"><span class="linenos">5719</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5720"><a href="#Parser-5720"><span class="linenos">5720</span></a>
-</span><span id="Parser-5721"><a href="#Parser-5721"><span class="linenos">5721</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type</span><span class="p">:</span>
-</span><span id="Parser-5722"><a href="#Parser-5722"><span class="linenos">5722</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-5723"><a href="#Parser-5723"><span class="linenos">5723</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5724"><a href="#Parser-5724"><span class="linenos">5724</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
-</span><span id="Parser-5725"><a href="#Parser-5725"><span class="linenos">5725</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Parser-5710"><a href="#Parser-5710"><span class="linenos">5710</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-5711"><a href="#Parser-5711"><span class="linenos">5711</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Parser-5712"><a href="#Parser-5712"><span class="linenos">5712</span></a> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+</span><span id="Parser-5713"><a href="#Parser-5713"><span class="linenos">5713</span></a> <span class="c1"># The current token might be multiple words</span>
+</span><span id="Parser-5714"><a href="#Parser-5714"><span class="linenos">5714</span></a> <span class="n">curr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
+</span><span id="Parser-5715"><a href="#Parser-5715"><span class="linenos">5715</span></a> <span class="n">key</span> <span class="o">=</span> <span class="n">curr</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot; &quot;</span><span class="p">)</span>
+</span><span id="Parser-5716"><a href="#Parser-5716"><span class="linenos">5716</span></a> <span class="n">this</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">curr</span><span class="p">)</span>
+</span><span id="Parser-5717"><a href="#Parser-5717"><span class="linenos">5717</span></a>
+</span><span id="Parser-5718"><a href="#Parser-5718"><span class="linenos">5718</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5719"><a href="#Parser-5719"><span class="linenos">5719</span></a> <span class="n">result</span><span class="p">,</span> <span class="n">trie</span> <span class="o">=</span> <span class="n">in_trie</span><span class="p">(</span><span class="n">trie</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
+</span><span id="Parser-5720"><a href="#Parser-5720"><span class="linenos">5720</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">FAILED</span><span class="p">:</span>
+</span><span id="Parser-5721"><a href="#Parser-5721"><span class="linenos">5721</span></a> <span class="k">break</span>
+</span><span id="Parser-5722"><a href="#Parser-5722"><span class="linenos">5722</span></a>
+</span><span id="Parser-5723"><a href="#Parser-5723"><span class="linenos">5723</span></a> <span class="k">if</span> <span class="n">result</span> <span class="o">==</span> <span class="n">TrieResult</span><span class="o">.</span><span class="n">EXISTS</span><span class="p">:</span>
+</span><span id="Parser-5724"><a href="#Parser-5724"><span class="linenos">5724</span></a> <span class="n">subparser</span> <span class="o">=</span> <span class="n">parsers</span><span class="p">[</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">this</span><span class="p">)]</span>
+</span><span id="Parser-5725"><a href="#Parser-5725"><span class="linenos">5725</span></a> <span class="k">return</span> <span class="n">subparser</span>
</span><span id="Parser-5726"><a href="#Parser-5726"><span class="linenos">5726</span></a>
-</span><span id="Parser-5727"><a href="#Parser-5727"><span class="linenos">5727</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5728"><a href="#Parser-5728"><span class="linenos">5728</span></a>
-</span><span id="Parser-5729"><a href="#Parser-5729"><span class="linenos">5729</span></a> <span class="k">def</span> <span class="nf">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">types</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="Parser-5730"><a href="#Parser-5730"><span class="linenos">5730</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
-</span><span id="Parser-5731"><a href="#Parser-5731"><span class="linenos">5731</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5732"><a href="#Parser-5732"><span class="linenos">5732</span></a>
-</span><span id="Parser-5733"><a href="#Parser-5733"><span class="linenos">5733</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="n">types</span><span class="p">:</span>
-</span><span id="Parser-5734"><a href="#Parser-5734"><span class="linenos">5734</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-5735"><a href="#Parser-5735"><span class="linenos">5735</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5736"><a href="#Parser-5736"><span class="linenos">5736</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-5737"><a href="#Parser-5737"><span class="linenos">5737</span></a>
-</span><span id="Parser-5738"><a href="#Parser-5738"><span class="linenos">5738</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5727"><a href="#Parser-5727"><span class="linenos">5727</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-5728"><a href="#Parser-5728"><span class="linenos">5728</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5729"><a href="#Parser-5729"><span class="linenos">5729</span></a>
+</span><span id="Parser-5730"><a href="#Parser-5730"><span class="linenos">5730</span></a> <span class="k">def</span> <span class="nf">_match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="Parser-5731"><a href="#Parser-5731"><span class="linenos">5731</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-5732"><a href="#Parser-5732"><span class="linenos">5732</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5733"><a href="#Parser-5733"><span class="linenos">5733</span></a>
+</span><span id="Parser-5734"><a href="#Parser-5734"><span class="linenos">5734</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type</span><span class="p">:</span>
+</span><span id="Parser-5735"><a href="#Parser-5735"><span class="linenos">5735</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-5736"><a href="#Parser-5736"><span class="linenos">5736</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5737"><a href="#Parser-5737"><span class="linenos">5737</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_add_comments</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
+</span><span id="Parser-5738"><a href="#Parser-5738"><span class="linenos">5738</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Parser-5739"><a href="#Parser-5739"><span class="linenos">5739</span></a>
-</span><span id="Parser-5740"><a href="#Parser-5740"><span class="linenos">5740</span></a> <span class="k">def</span> <span class="nf">_match_pair</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type_a</span><span class="p">,</span> <span class="n">token_type_b</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="Parser-5741"><a href="#Parser-5741"><span class="linenos">5741</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
-</span><span id="Parser-5742"><a href="#Parser-5742"><span class="linenos">5742</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5743"><a href="#Parser-5743"><span class="linenos">5743</span></a>
-</span><span id="Parser-5744"><a href="#Parser-5744"><span class="linenos">5744</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_a</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_b</span><span class="p">:</span>
-</span><span id="Parser-5745"><a href="#Parser-5745"><span class="linenos">5745</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-5746"><a href="#Parser-5746"><span class="linenos">5746</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
-</span><span id="Parser-5747"><a href="#Parser-5747"><span class="linenos">5747</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-5748"><a href="#Parser-5748"><span class="linenos">5748</span></a>
-</span><span id="Parser-5749"><a href="#Parser-5749"><span class="linenos">5749</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5740"><a href="#Parser-5740"><span class="linenos">5740</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5741"><a href="#Parser-5741"><span class="linenos">5741</span></a>
+</span><span id="Parser-5742"><a href="#Parser-5742"><span class="linenos">5742</span></a> <span class="k">def</span> <span class="nf">_match_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">types</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="Parser-5743"><a href="#Parser-5743"><span class="linenos">5743</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="p">:</span>
+</span><span id="Parser-5744"><a href="#Parser-5744"><span class="linenos">5744</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5745"><a href="#Parser-5745"><span class="linenos">5745</span></a>
+</span><span id="Parser-5746"><a href="#Parser-5746"><span class="linenos">5746</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="ow">in</span> <span class="n">types</span><span class="p">:</span>
+</span><span id="Parser-5747"><a href="#Parser-5747"><span class="linenos">5747</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-5748"><a href="#Parser-5748"><span class="linenos">5748</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5749"><a href="#Parser-5749"><span class="linenos">5749</span></a> <span class="k">return</span> <span class="kc">True</span>
</span><span id="Parser-5750"><a href="#Parser-5750"><span class="linenos">5750</span></a>
-</span><span id="Parser-5751"><a href="#Parser-5751"><span class="linenos">5751</span></a> <span class="k">def</span> <span class="nf">_match_l_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-5752"><a href="#Parser-5752"><span class="linenos">5752</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="Parser-5753"><a href="#Parser-5753"><span class="linenos">5753</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting (&quot;</span><span class="p">)</span>
-</span><span id="Parser-5754"><a href="#Parser-5754"><span class="linenos">5754</span></a>
-</span><span id="Parser-5755"><a href="#Parser-5755"><span class="linenos">5755</span></a> <span class="k">def</span> <span class="nf">_match_r_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Parser-5756"><a href="#Parser-5756"><span class="linenos">5756</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
-</span><span id="Parser-5757"><a href="#Parser-5757"><span class="linenos">5757</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">)</span>
-</span><span id="Parser-5758"><a href="#Parser-5758"><span class="linenos">5758</span></a>
-</span><span id="Parser-5759"><a href="#Parser-5759"><span class="linenos">5759</span></a> <span class="k">def</span> <span class="nf">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="Parser-5760"><a href="#Parser-5760"><span class="linenos">5760</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
-</span><span id="Parser-5761"><a href="#Parser-5761"><span class="linenos">5761</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-5762"><a href="#Parser-5762"><span class="linenos">5762</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5763"><a href="#Parser-5763"><span class="linenos">5763</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-5764"><a href="#Parser-5764"><span class="linenos">5764</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5765"><a href="#Parser-5765"><span class="linenos">5765</span></a>
-</span><span id="Parser-5766"><a href="#Parser-5766"><span class="linenos">5766</span></a> <span class="k">def</span> <span class="nf">_match_text_seq</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
-</span><span id="Parser-5767"><a href="#Parser-5767"><span class="linenos">5767</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
-</span><span id="Parser-5768"><a href="#Parser-5768"><span class="linenos">5768</span></a> <span class="k">for</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
-</span><span id="Parser-5769"><a href="#Parser-5769"><span class="linenos">5769</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="n">text</span><span class="p">:</span>
-</span><span id="Parser-5770"><a href="#Parser-5770"><span class="linenos">5770</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
-</span><span id="Parser-5771"><a href="#Parser-5771"><span class="linenos">5771</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5772"><a href="#Parser-5772"><span class="linenos">5772</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-5773"><a href="#Parser-5773"><span class="linenos">5773</span></a> <span class="k">return</span> <span class="kc">None</span>
-</span><span id="Parser-5774"><a href="#Parser-5774"><span class="linenos">5774</span></a>
-</span><span id="Parser-5775"><a href="#Parser-5775"><span class="linenos">5775</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">advance</span><span class="p">:</span>
-</span><span id="Parser-5776"><a href="#Parser-5776"><span class="linenos">5776</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
-</span><span id="Parser-5777"><a href="#Parser-5777"><span class="linenos">5777</span></a>
-</span><span id="Parser-5778"><a href="#Parser-5778"><span class="linenos">5778</span></a> <span class="k">return</span> <span class="kc">True</span>
-</span><span id="Parser-5779"><a href="#Parser-5779"><span class="linenos">5779</span></a>
-</span><span id="Parser-5780"><a href="#Parser-5780"><span class="linenos">5780</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="Parser-5781"><a href="#Parser-5781"><span class="linenos">5781</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
-</span><span id="Parser-5782"><a href="#Parser-5782"><span class="linenos">5782</span></a> <span class="o">...</span>
-</span><span id="Parser-5783"><a href="#Parser-5783"><span class="linenos">5783</span></a>
-</span><span id="Parser-5784"><a href="#Parser-5784"><span class="linenos">5784</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
-</span><span id="Parser-5785"><a href="#Parser-5785"><span class="linenos">5785</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span>
-</span><span id="Parser-5786"><a href="#Parser-5786"><span class="linenos">5786</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
-</span><span id="Parser-5787"><a href="#Parser-5787"><span class="linenos">5787</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5788"><a href="#Parser-5788"><span class="linenos">5788</span></a> <span class="o">...</span>
-</span><span id="Parser-5789"><a href="#Parser-5789"><span class="linenos">5789</span></a>
-</span><span id="Parser-5790"><a href="#Parser-5790"><span class="linenos">5790</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">):</span>
-</span><span id="Parser-5791"><a href="#Parser-5791"><span class="linenos">5791</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
-</span><span id="Parser-5792"><a href="#Parser-5792"><span class="linenos">5792</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
-</span><span id="Parser-5793"><a href="#Parser-5793"><span class="linenos">5793</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
-</span><span id="Parser-5794"><a href="#Parser-5794"><span class="linenos">5794</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
-</span><span id="Parser-5795"><a href="#Parser-5795"><span class="linenos">5795</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
-</span><span id="Parser-5796"><a href="#Parser-5796"><span class="linenos">5796</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="Parser-5797"><a href="#Parser-5797"><span class="linenos">5797</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Parser-5798"><a href="#Parser-5798"><span class="linenos">5798</span></a> <span class="p">)</span>
-</span><span id="Parser-5799"><a href="#Parser-5799"><span class="linenos">5799</span></a>
-</span><span id="Parser-5800"><a href="#Parser-5800"><span class="linenos">5800</span></a> <span class="k">return</span> <span class="n">this</span>
-</span><span id="Parser-5801"><a href="#Parser-5801"><span class="linenos">5801</span></a>
-</span><span id="Parser-5802"><a href="#Parser-5802"><span class="linenos">5802</span></a> <span class="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span>
-</span><span id="Parser-5803"><a href="#Parser-5803"><span class="linenos">5803</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">lambda_variables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
-</span><span id="Parser-5804"><a href="#Parser-5804"><span class="linenos">5804</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
-</span><span id="Parser-5805"><a href="#Parser-5805"><span class="linenos">5805</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
-</span><span id="Parser-5806"><a href="#Parser-5806"><span class="linenos">5806</span></a> <span class="k">return</span> <span class="n">node</span>
-</span><span id="Parser-5807"><a href="#Parser-5807"><span class="linenos">5807</span></a>
-</span><span id="Parser-5808"><a href="#Parser-5808"><span class="linenos">5808</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
-</span><span id="Parser-5809"><a href="#Parser-5809"><span class="linenos">5809</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">lambda_variables</span><span class="p">:</span>
-</span><span id="Parser-5810"><a href="#Parser-5810"><span class="linenos">5810</span></a> <span class="n">dot_or_id</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">to_dot</span><span class="p">()</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span>
-</span><span id="Parser-5811"><a href="#Parser-5811"><span class="linenos">5811</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="Parser-5751"><a href="#Parser-5751"><span class="linenos">5751</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5752"><a href="#Parser-5752"><span class="linenos">5752</span></a>
+</span><span id="Parser-5753"><a href="#Parser-5753"><span class="linenos">5753</span></a> <span class="k">def</span> <span class="nf">_match_pair</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">token_type_a</span><span class="p">,</span> <span class="n">token_type_b</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="Parser-5754"><a href="#Parser-5754"><span class="linenos">5754</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="p">:</span>
+</span><span id="Parser-5755"><a href="#Parser-5755"><span class="linenos">5755</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5756"><a href="#Parser-5756"><span class="linenos">5756</span></a>
+</span><span id="Parser-5757"><a href="#Parser-5757"><span class="linenos">5757</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_a</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</span><span class="o">.</span><span class="n">token_type</span> <span class="o">==</span> <span class="n">token_type_b</span><span class="p">:</span>
+</span><span id="Parser-5758"><a href="#Parser-5758"><span class="linenos">5758</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-5759"><a href="#Parser-5759"><span class="linenos">5759</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+</span><span id="Parser-5760"><a href="#Parser-5760"><span class="linenos">5760</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Parser-5761"><a href="#Parser-5761"><span class="linenos">5761</span></a>
+</span><span id="Parser-5762"><a href="#Parser-5762"><span class="linenos">5762</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5763"><a href="#Parser-5763"><span class="linenos">5763</span></a>
+</span><span id="Parser-5764"><a href="#Parser-5764"><span class="linenos">5764</span></a> <span class="k">def</span> <span class="nf">_match_l_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-5765"><a href="#Parser-5765"><span class="linenos">5765</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">L_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="Parser-5766"><a href="#Parser-5766"><span class="linenos">5766</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting (&quot;</span><span class="p">)</span>
+</span><span id="Parser-5767"><a href="#Parser-5767"><span class="linenos">5767</span></a>
+</span><span id="Parser-5768"><a href="#Parser-5768"><span class="linenos">5768</span></a> <span class="k">def</span> <span class="nf">_match_r_paren</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Parser-5769"><a href="#Parser-5769"><span class="linenos">5769</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match</span><span class="p">(</span><span class="n">TokenType</span><span class="o">.</span><span class="n">R_PAREN</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">expression</span><span class="p">):</span>
+</span><span id="Parser-5770"><a href="#Parser-5770"><span class="linenos">5770</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">&quot;Expecting )&quot;</span><span class="p">)</span>
+</span><span id="Parser-5771"><a href="#Parser-5771"><span class="linenos">5771</span></a>
+</span><span id="Parser-5772"><a href="#Parser-5772"><span class="linenos">5772</span></a> <span class="k">def</span> <span class="nf">_match_texts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="Parser-5773"><a href="#Parser-5773"><span class="linenos">5773</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
+</span><span id="Parser-5774"><a href="#Parser-5774"><span class="linenos">5774</span></a> <span class="k">if</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-5775"><a href="#Parser-5775"><span class="linenos">5775</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5776"><a href="#Parser-5776"><span class="linenos">5776</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Parser-5777"><a href="#Parser-5777"><span class="linenos">5777</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5778"><a href="#Parser-5778"><span class="linenos">5778</span></a>
+</span><span id="Parser-5779"><a href="#Parser-5779"><span class="linenos">5779</span></a> <span class="k">def</span> <span class="nf">_match_text_seq</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">texts</span><span class="p">,</span> <span class="n">advance</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+</span><span id="Parser-5780"><a href="#Parser-5780"><span class="linenos">5780</span></a> <span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_index</span>
+</span><span id="Parser-5781"><a href="#Parser-5781"><span class="linenos">5781</span></a> <span class="k">for</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">texts</span><span class="p">:</span>
+</span><span id="Parser-5782"><a href="#Parser-5782"><span class="linenos">5782</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_curr</span><span class="o">.</span><span class="n">text</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="n">text</span><span class="p">:</span>
+</span><span id="Parser-5783"><a href="#Parser-5783"><span class="linenos">5783</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_advance</span><span class="p">()</span>
+</span><span id="Parser-5784"><a href="#Parser-5784"><span class="linenos">5784</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5785"><a href="#Parser-5785"><span class="linenos">5785</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-5786"><a href="#Parser-5786"><span class="linenos">5786</span></a> <span class="k">return</span> <span class="kc">None</span>
+</span><span id="Parser-5787"><a href="#Parser-5787"><span class="linenos">5787</span></a>
+</span><span id="Parser-5788"><a href="#Parser-5788"><span class="linenos">5788</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">advance</span><span class="p">:</span>
+</span><span id="Parser-5789"><a href="#Parser-5789"><span class="linenos">5789</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">_retreat</span><span class="p">(</span><span class="n">index</span><span class="p">)</span>
+</span><span id="Parser-5790"><a href="#Parser-5790"><span class="linenos">5790</span></a>
+</span><span id="Parser-5791"><a href="#Parser-5791"><span class="linenos">5791</span></a> <span class="k">return</span> <span class="kc">True</span>
+</span><span id="Parser-5792"><a href="#Parser-5792"><span class="linenos">5792</span></a>
+</span><span id="Parser-5793"><a href="#Parser-5793"><span class="linenos">5793</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="Parser-5794"><a href="#Parser-5794"><span class="linenos">5794</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
+</span><span id="Parser-5795"><a href="#Parser-5795"><span class="linenos">5795</span></a> <span class="o">...</span>
+</span><span id="Parser-5796"><a href="#Parser-5796"><span class="linenos">5796</span></a>
+</span><span id="Parser-5797"><a href="#Parser-5797"><span class="linenos">5797</span></a> <span class="nd">@t</span><span class="o">.</span><span class="n">overload</span>
+</span><span id="Parser-5798"><a href="#Parser-5798"><span class="linenos">5798</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span>
+</span><span id="Parser-5799"><a href="#Parser-5799"><span class="linenos">5799</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]</span>
+</span><span id="Parser-5800"><a href="#Parser-5800"><span class="linenos">5800</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5801"><a href="#Parser-5801"><span class="linenos">5801</span></a> <span class="o">...</span>
+</span><span id="Parser-5802"><a href="#Parser-5802"><span class="linenos">5802</span></a>
+</span><span id="Parser-5803"><a href="#Parser-5803"><span class="linenos">5803</span></a> <span class="k">def</span> <span class="nf">_replace_columns_with_dots</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">this</span><span class="p">):</span>
+</span><span id="Parser-5804"><a href="#Parser-5804"><span class="linenos">5804</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
+</span><span id="Parser-5805"><a href="#Parser-5805"><span class="linenos">5805</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
+</span><span id="Parser-5806"><a href="#Parser-5806"><span class="linenos">5806</span></a> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
+</span><span id="Parser-5807"><a href="#Parser-5807"><span class="linenos">5807</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">replace_children</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_replace_columns_with_dots</span><span class="p">)</span>
+</span><span id="Parser-5808"><a href="#Parser-5808"><span class="linenos">5808</span></a> <span class="n">table</span> <span class="o">=</span> <span class="n">this</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;table&quot;</span><span class="p">)</span>
+</span><span id="Parser-5809"><a href="#Parser-5809"><span class="linenos">5809</span></a> <span class="n">this</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="Parser-5810"><a href="#Parser-5810"><span class="linenos">5810</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">,</span> <span class="n">this</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">)</span> <span class="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Parser-5811"><a href="#Parser-5811"><span class="linenos">5811</span></a> <span class="p">)</span>
</span><span id="Parser-5812"><a href="#Parser-5812"><span class="linenos">5812</span></a>
-</span><span id="Parser-5813"><a href="#Parser-5813"><span class="linenos">5813</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
-</span><span id="Parser-5814"><a href="#Parser-5814"><span class="linenos">5814</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
-</span><span id="Parser-5815"><a href="#Parser-5815"><span class="linenos">5815</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
-</span><span id="Parser-5816"><a href="#Parser-5816"><span class="linenos">5816</span></a> <span class="k">break</span>
-</span><span id="Parser-5817"><a href="#Parser-5817"><span class="linenos">5817</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">parent</span>
-</span><span id="Parser-5818"><a href="#Parser-5818"><span class="linenos">5818</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5819"><a href="#Parser-5819"><span class="linenos">5819</span></a> <span class="k">if</span> <span class="n">column</span> <span class="ow">is</span> <span class="n">node</span><span class="p">:</span>
-</span><span id="Parser-5820"><a href="#Parser-5820"><span class="linenos">5820</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
-</span><span id="Parser-5821"><a href="#Parser-5821"><span class="linenos">5821</span></a> <span class="k">else</span><span class="p">:</span>
-</span><span id="Parser-5822"><a href="#Parser-5822"><span class="linenos">5822</span></a> <span class="n">column</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
-</span><span id="Parser-5823"><a href="#Parser-5823"><span class="linenos">5823</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="Parser-5813"><a href="#Parser-5813"><span class="linenos">5813</span></a> <span class="k">return</span> <span class="n">this</span>
+</span><span id="Parser-5814"><a href="#Parser-5814"><span class="linenos">5814</span></a>
+</span><span id="Parser-5815"><a href="#Parser-5815"><span class="linenos">5815</span></a> <span class="k">def</span> <span class="nf">_replace_lambda</span><span class="p">(</span>
+</span><span id="Parser-5816"><a href="#Parser-5816"><span class="linenos">5816</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">],</span> <span class="n">lambda_variables</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span>
+</span><span id="Parser-5817"><a href="#Parser-5817"><span class="linenos">5817</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
+</span><span id="Parser-5818"><a href="#Parser-5818"><span class="linenos">5818</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">node</span><span class="p">:</span>
+</span><span id="Parser-5819"><a href="#Parser-5819"><span class="linenos">5819</span></a> <span class="k">return</span> <span class="n">node</span>
+</span><span id="Parser-5820"><a href="#Parser-5820"><span class="linenos">5820</span></a>
+</span><span id="Parser-5821"><a href="#Parser-5821"><span class="linenos">5821</span></a> <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Column</span><span class="p">):</span>
+</span><span id="Parser-5822"><a href="#Parser-5822"><span class="linenos">5822</span></a> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">lambda_variables</span><span class="p">:</span>
+</span><span id="Parser-5823"><a href="#Parser-5823"><span class="linenos">5823</span></a> <span class="n">dot_or_id</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">to_dot</span><span class="p">()</span> <span class="k">if</span> <span class="n">column</span><span class="o">.</span><span class="n">table</span> <span class="k">else</span> <span class="n">column</span><span class="o">.</span><span class="n">this</span>
+</span><span id="Parser-5824"><a href="#Parser-5824"><span class="linenos">5824</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">column</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="Parser-5825"><a href="#Parser-5825"><span class="linenos">5825</span></a>
+</span><span id="Parser-5826"><a href="#Parser-5826"><span class="linenos">5826</span></a> <span class="k">while</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
+</span><span id="Parser-5827"><a href="#Parser-5827"><span class="linenos">5827</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Dot</span><span class="p">):</span>
+</span><span id="Parser-5828"><a href="#Parser-5828"><span class="linenos">5828</span></a> <span class="n">parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
+</span><span id="Parser-5829"><a href="#Parser-5829"><span class="linenos">5829</span></a> <span class="k">break</span>
+</span><span id="Parser-5830"><a href="#Parser-5830"><span class="linenos">5830</span></a> <span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">parent</span>
+</span><span id="Parser-5831"><a href="#Parser-5831"><span class="linenos">5831</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5832"><a href="#Parser-5832"><span class="linenos">5832</span></a> <span class="k">if</span> <span class="n">column</span> <span class="ow">is</span> <span class="n">node</span><span class="p">:</span>
+</span><span id="Parser-5833"><a href="#Parser-5833"><span class="linenos">5833</span></a> <span class="n">node</span> <span class="o">=</span> <span class="n">dot_or_id</span>
+</span><span id="Parser-5834"><a href="#Parser-5834"><span class="linenos">5834</span></a> <span class="k">else</span><span class="p">:</span>
+</span><span id="Parser-5835"><a href="#Parser-5835"><span class="linenos">5835</span></a> <span class="n">column</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">dot_or_id</span><span class="p">)</span>
+</span><span id="Parser-5836"><a href="#Parser-5836"><span class="linenos">5836</span></a> <span class="k">return</span> <span class="n">node</span>
</span></pre></div>
@@ -12188,7 +12214,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">NESTED_TYPE_TOKENS</span> =
<input id="Parser.NESTED_TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.NESTED_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.NESTED_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;}</span>
</div>
@@ -12200,7 +12226,7 @@ Default: 3</li>
<div id="Parser.ENUM_TYPE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">ENUM_TYPE_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;}</span>
</div>
@@ -12213,7 +12239,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">AGGREGATE_TYPE_TOKENS</span> =
<input id="Parser.AGGREGATE_TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.AGGREGATE_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.AGGREGATE_TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;}</span>
</div>
@@ -12226,7 +12252,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TYPE_TOKENS</span> =
<input id="Parser.TYPE_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.TYPE_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -12265,7 +12291,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">RESERVED_TOKENS</span> =
<input id="Parser.RESERVED_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.RESERVED_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.STAR: &#39;STAR&#39;&gt;, &lt;TokenType.L_BRACKET: &#39;L_BRACKET&#39;&gt;, &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &lt;TokenType.CARET: &#39;CARET&#39;&gt;, &lt;TokenType.GT: &#39;GT&#39;&gt;, &lt;TokenType.PLACEHOLDER: &#39;PLACEHOLDER&#39;&gt;, &lt;TokenType.LT: &#39;LT&#39;&gt;, &lt;TokenType.PIPE: &#39;PIPE&#39;&gt;, &lt;TokenType.R_BRACKET: &#39;R_BRACKET&#39;&gt;, &lt;TokenType.QUOTE: &#39;QUOTE&#39;&gt;, &lt;TokenType.L_BRACE: &#39;L_BRACE&#39;&gt;, &lt;TokenType.L_PAREN: &#39;L_PAREN&#39;&gt;, &lt;TokenType.AMP: &#39;AMP&#39;&gt;, &lt;TokenType.DOT: &#39;DOT&#39;&gt;, &lt;TokenType.BACKSLASH: &#39;BACKSLASH&#39;&gt;, &lt;TokenType.R_BRACE: &#39;R_BRACE&#39;&gt;, &lt;TokenType.SEMICOLON: &#39;SEMICOLON&#39;&gt;, &lt;TokenType.PARAMETER: &#39;PARAMETER&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.SLASH: &#39;SLASH&#39;&gt;, &lt;TokenType.TILDA: &#39;TILDA&#39;&gt;, &lt;TokenType.COLON: &#39;COLON&#39;&gt;, &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &lt;TokenType.DASH: &#39;DASH&#39;&gt;, &lt;TokenType.PLUS: &#39;PLUS&#39;&gt;, &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &lt;TokenType.HASH: &#39;HASH&#39;&gt;, &lt;TokenType.R_PAREN: &#39;R_PAREN&#39;&gt;, &lt;TokenType.COMMA: &#39;COMMA&#39;&gt;, &lt;TokenType.MOD: &#39;MOD&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.RESERVED_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.R_PAREN: &#39;R_PAREN&#39;&gt;, &lt;TokenType.L_BRACE: &#39;L_BRACE&#39;&gt;, &lt;TokenType.PIPE: &#39;PIPE&#39;&gt;, &lt;TokenType.LT: &#39;LT&#39;&gt;, &lt;TokenType.R_BRACKET: &#39;R_BRACKET&#39;&gt;, &lt;TokenType.GT: &#39;GT&#39;&gt;, &lt;TokenType.L_BRACKET: &#39;L_BRACKET&#39;&gt;, &lt;TokenType.EQ: &#39;EQ&#39;&gt;, &lt;TokenType.NOT: &#39;NOT&#39;&gt;, &lt;TokenType.PLACEHOLDER: &#39;PLACEHOLDER&#39;&gt;, &lt;TokenType.HASH: &#39;HASH&#39;&gt;, &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &lt;TokenType.PARAMETER: &#39;PARAMETER&#39;&gt;, &lt;TokenType.L_PAREN: &#39;L_PAREN&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.SEMICOLON: &#39;SEMICOLON&#39;&gt;, &lt;TokenType.TILDA: &#39;TILDA&#39;&gt;, &lt;TokenType.AMP: &#39;AMP&#39;&gt;, &lt;TokenType.MOD: &#39;MOD&#39;&gt;, &lt;TokenType.PLUS: &#39;PLUS&#39;&gt;, &lt;TokenType.COMMA: &#39;COMMA&#39;&gt;, &lt;TokenType.DOT: &#39;DOT&#39;&gt;, &lt;TokenType.DASH: &#39;DASH&#39;&gt;, &lt;TokenType.SLASH: &#39;SLASH&#39;&gt;, &lt;TokenType.STAR: &#39;STAR&#39;&gt;, &lt;TokenType.CARET: &#39;CARET&#39;&gt;, &lt;TokenType.R_BRACE: &#39;R_BRACE&#39;&gt;, &lt;TokenType.BACKSLASH: &#39;BACKSLASH&#39;&gt;, &lt;TokenType.COLON: &#39;COLON&#39;&gt;, &lt;TokenType.QUOTE: &#39;QUOTE&#39;&gt;}</span>
</div>
@@ -12278,7 +12304,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">DB_CREATABLES</span> =
<input id="Parser.DB_CREATABLES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.DB_CREATABLES-view-value"></label><span class="default_value">{&lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.DB_CREATABLES-view-value"></label><span class="default_value">{&lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;}</span>
</div>
@@ -12291,7 +12317,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">CREATABLES</span> =
<input id="Parser.CREATABLES-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.CREATABLES-view-value"></label><span class="default_value">{&lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.CREATABLES-view-value"></label><span class="default_value">{&lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;}</span>
</div>
@@ -12304,7 +12330,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">ID_VAR_TOKENS</span> =
<input id="Parser.ID_VAR_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.ID_VAR_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.ID_VAR_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -12317,7 +12343,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">INTERVAL_VARS</span> =
<input id="Parser.INTERVAL_VARS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.INTERVAL_VARS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.INTERVAL_VARS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -12330,7 +12356,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TABLE_ALIAS_TOKENS</span> =
<input id="Parser.TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -12343,7 +12369,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">COMMENT_TABLE_ALIAS_TOKENS</span> =
<input id="Parser.COMMENT_TABLE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.COMMENT_TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.COMMENT_TABLE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -12356,7 +12382,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">UPDATE_ALIAS_TOKENS</span> =
<input id="Parser.UPDATE_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.UPDATE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.UPDATE_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -12368,7 +12394,7 @@ Default: 3</li>
<div id="Parser.TRIM_TYPES" class="classattr">
<div class="attr variable">
<span class="name">TRIM_TYPES</span> =
-<span class="default_value">{&#39;TRAILING&#39;, &#39;LEADING&#39;, &#39;BOTH&#39;}</span>
+<span class="default_value">{&#39;BOTH&#39;, &#39;LEADING&#39;, &#39;TRAILING&#39;}</span>
</div>
@@ -12381,7 +12407,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FUNC_TOKENS</span> =
<input id="Parser.FUNC_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.FUNC_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.UNNEST: &#39;UNNEST&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.XOR: &#39;XOR&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.ILIKE: &#39;ILIKE&#39;&gt;, &lt;TokenType.LIKE: &#39;LIKE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.GLOB: &#39;GLOB&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.INSERT: &#39;INSERT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.RLIKE: &#39;RLIKE&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -12496,7 +12522,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TIMESTAMPS</span> =
<input id="Parser.TIMESTAMPS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.TIMESTAMPS-view-value"></label><span class="default_value">{&lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.TIMESTAMPS-view-value"></label><span class="default_value">{&lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;}</span>
</div>
@@ -12508,7 +12534,7 @@ Default: 3</li>
<div id="Parser.SET_OPERATIONS" class="classattr">
<div class="attr variable">
<span class="name">SET_OPERATIONS</span> =
-<span class="default_value">{&lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;, &lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &lt;TokenType.UNION: &#39;UNION&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.INTERSECT: &#39;INTERSECT&#39;&gt;, &lt;TokenType.UNION: &#39;UNION&#39;&gt;, &lt;TokenType.EXCEPT: &#39;EXCEPT&#39;&gt;}</span>
</div>
@@ -12532,7 +12558,7 @@ Default: 3</li>
<div id="Parser.JOIN_SIDES" class="classattr">
<div class="attr variable">
<span class="name">JOIN_SIDES</span> =
-<span class="default_value">{&lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;}</span>
</div>
@@ -12545,7 +12571,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">JOIN_KINDS</span> =
<input id="Parser.JOIN_KINDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.JOIN_KINDS-view-value"></label><span class="default_value">{&lt;TokenType.INNER: &#39;INNER&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.JOIN_KINDS-view-value"></label><span class="default_value">{&lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.OUTER: &#39;OUTER&#39;&gt;, &lt;TokenType.CROSS: &#39;CROSS&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.INNER: &#39;INNER&#39;&gt;}</span>
</div>
@@ -12712,7 +12738,7 @@ Default: 3</li>
<div id="Parser.SCHEMA_UNNAMED_CONSTRAINTS" class="classattr">
<div class="attr variable">
<span class="name">SCHEMA_UNNAMED_CONSTRAINTS</span> =
-<span class="default_value">{&#39;FOREIGN KEY&#39;, &#39;PERIOD&#39;, &#39;PRIMARY KEY&#39;, &#39;UNIQUE&#39;, &#39;LIKE&#39;, &#39;CHECK&#39;}</span>
+<span class="default_value">{&#39;UNIQUE&#39;, &#39;LIKE&#39;, &#39;PRIMARY KEY&#39;, &#39;PERIOD&#39;, &#39;FOREIGN KEY&#39;, &#39;CHECK&#39;}</span>
</div>
@@ -12737,7 +12763,7 @@ Default: 3</li>
<div id="Parser.INVALID_FUNC_NAME_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">INVALID_FUNC_NAME_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;, &lt;TokenType.STRING: &#39;STRING&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.STRING: &#39;STRING&#39;&gt;, &lt;TokenType.IDENTIFIER: &#39;IDENTIFIER&#39;&gt;}</span>
</div>
@@ -12837,7 +12863,7 @@ Default: 3</li>
<div id="Parser.DDL_SELECT_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">DDL_SELECT_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.WITH: &#39;WITH&#39;&gt;, &lt;TokenType.L_PAREN: &#39;L_PAREN&#39;&gt;, &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.WITH: &#39;WITH&#39;&gt;, &lt;TokenType.SELECT: &#39;SELECT&#39;&gt;, &lt;TokenType.L_PAREN: &#39;L_PAREN&#39;&gt;}</span>
</div>
@@ -12849,7 +12875,7 @@ Default: 3</li>
<div id="Parser.PRE_VOLATILE_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">PRE_VOLATILE_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CREATE: &#39;CREATE&#39;&gt;}</span>
</div>
@@ -12861,7 +12887,7 @@ Default: 3</li>
<div id="Parser.TRANSACTION_KIND" class="classattr">
<div class="attr variable">
<span class="name">TRANSACTION_KIND</span> =
-<span class="default_value">{&#39;EXCLUSIVE&#39;, &#39;DEFERRED&#39;, &#39;IMMEDIATE&#39;}</span>
+<span class="default_value">{&#39;IMMEDIATE&#39;, &#39;EXCLUSIVE&#39;, &#39;DEFERRED&#39;}</span>
</div>
@@ -12874,7 +12900,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">TRANSACTION_CHARACTERISTICS</span> =
<input id="Parser.TRANSACTION_CHARACTERISTICS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.TRANSACTION_CHARACTERISTICS-view-value"></label><span class="default_value">{&#39;READ WRITE&#39;, &#39;ISOLATION LEVEL REPEATABLE READ&#39;, &#39;READ ONLY&#39;, &#39;ISOLATION LEVEL READ UNCOMMITTED&#39;, &#39;ISOLATION LEVEL SERIALIZABLE&#39;, &#39;ISOLATION LEVEL READ COMMITTED&#39;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.TRANSACTION_CHARACTERISTICS-view-value"></label><span class="default_value">{&#39;ISOLATION LEVEL SERIALIZABLE&#39;, &#39;ISOLATION LEVEL READ COMMITTED&#39;, &#39;ISOLATION LEVEL REPEATABLE READ&#39;, &#39;READ ONLY&#39;, &#39;READ WRITE&#39;, &#39;ISOLATION LEVEL READ UNCOMMITTED&#39;}</span>
</div>
@@ -12886,7 +12912,7 @@ Default: 3</li>
<div id="Parser.INSERT_ALTERNATIVES" class="classattr">
<div class="attr variable">
<span class="name">INSERT_ALTERNATIVES</span> =
-<span class="default_value">{&#39;FAIL&#39;, &#39;ABORT&#39;, &#39;IGNORE&#39;, &#39;ROLLBACK&#39;, &#39;REPLACE&#39;}</span>
+<span class="default_value">{&#39;ROLLBACK&#39;, &#39;FAIL&#39;, &#39;ABORT&#39;, &#39;REPLACE&#39;, &#39;IGNORE&#39;}</span>
</div>
@@ -12898,7 +12924,7 @@ Default: 3</li>
<div id="Parser.CLONE_KEYWORDS" class="classattr">
<div class="attr variable">
<span class="name">CLONE_KEYWORDS</span> =
-<span class="default_value">{&#39;CLONE&#39;, &#39;COPY&#39;}</span>
+<span class="default_value">{&#39;COPY&#39;, &#39;CLONE&#39;}</span>
</div>
@@ -12910,7 +12936,7 @@ Default: 3</li>
<div id="Parser.HISTORICAL_DATA_KIND" class="classattr">
<div class="attr variable">
<span class="name">HISTORICAL_DATA_KIND</span> =
-<span class="default_value">{&#39;OFFSET&#39;, &#39;TIMESTAMP&#39;, &#39;STREAM&#39;, &#39;STATEMENT&#39;}</span>
+<span class="default_value">{&#39;OFFSET&#39;, &#39;TIMESTAMP&#39;, &#39;STATEMENT&#39;, &#39;STREAM&#39;}</span>
</div>
@@ -12922,7 +12948,7 @@ Default: 3</li>
<div id="Parser.OPCLASS_FOLLOW_KEYWORDS" class="classattr">
<div class="attr variable">
<span class="name">OPCLASS_FOLLOW_KEYWORDS</span> =
-<span class="default_value">{&#39;ASC&#39;, &#39;NULLS&#39;, &#39;DESC&#39;}</span>
+<span class="default_value">{&#39;NULLS&#39;, &#39;DESC&#39;, &#39;ASC&#39;}</span>
</div>
@@ -12934,7 +12960,7 @@ Default: 3</li>
<div id="Parser.OPTYPE_FOLLOW_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">OPTYPE_FOLLOW_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.COMMA: &#39;COMMA&#39;&gt;, &lt;TokenType.R_PAREN: &#39;R_PAREN&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.R_PAREN: &#39;R_PAREN&#39;&gt;, &lt;TokenType.COMMA: &#39;COMMA&#39;&gt;}</span>
</div>
@@ -12946,7 +12972,7 @@ Default: 3</li>
<div id="Parser.TABLE_INDEX_HINT_TOKENS" class="classattr">
<div class="attr variable">
<span class="name">TABLE_INDEX_HINT_TOKENS</span> =
-<span class="default_value">{&lt;TokenType.IGNORE: &#39;IGNORE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.FORCE: &#39;FORCE&#39;&gt;}</span>
+<span class="default_value">{&lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.FORCE: &#39;FORCE&#39;&gt;, &lt;TokenType.IGNORE: &#39;IGNORE&#39;&gt;}</span>
</div>
@@ -12959,7 +12985,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">WINDOW_ALIAS_TOKENS</span> =
<input id="Parser.WINDOW_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.WINDOW_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.WINDOW_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -13008,7 +13034,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">FETCH_TOKENS</span> =
<input id="Parser.FETCH_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.FETCH_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.FETCH_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -13021,7 +13047,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">ADD_CONSTRAINT_TOKENS</span> =
<input id="Parser.ADD_CONSTRAINT_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.ADD_CONSTRAINT_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.ADD_CONSTRAINT_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.PRIMARY_KEY: &#39;PRIMARY_KEY&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;}</span>
</div>
@@ -13058,7 +13084,7 @@ Default: 3</li>
<div class="attr variable">
<span class="name">UNNEST_OFFSET_ALIAS_TOKENS</span> =
<input id="Parser.UNNEST_OFFSET_ALIAS_TOKENS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
- <label class="view-value-button pdoc-button" for="Parser.UNNEST_OFFSET_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;}</span>
+ <label class="view-value-button pdoc-button" for="Parser.UNNEST_OFFSET_ALIAS_TOKENS-view-value"></label><span class="default_value">{&lt;TokenType.TEXT: &#39;TEXT&#39;&gt;, &lt;TokenType.RECURSIVE: &#39;RECURSIVE&#39;&gt;, &lt;TokenType.AGGREGATEFUNCTION: &#39;AGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.CONSTRAINT: &#39;CONSTRAINT&#39;&gt;, &lt;TokenType.OVERLAPS: &#39;OVERLAPS&#39;&gt;, &lt;TokenType.LEFT: &#39;LEFT&#39;&gt;, &lt;TokenType.PROCEDURE: &#39;PROCEDURE&#39;&gt;, &lt;TokenType.WINDOW: &#39;WINDOW&#39;&gt;, &lt;TokenType.VOLATILE: &#39;VOLATILE&#39;&gt;, &lt;TokenType.ORDINALITY: &#39;ORDINALITY&#39;&gt;, &lt;TokenType.MONEY: &#39;MONEY&#39;&gt;, &lt;TokenType.INT4RANGE: &#39;INT4RANGE&#39;&gt;, &lt;TokenType.MEDIUMBLOB: &#39;MEDIUMBLOB&#39;&gt;, &lt;TokenType.INTERVAL: &#39;INTERVAL&#39;&gt;, &lt;TokenType.DATEMULTIRANGE: &#39;DATEMULTIRANGE&#39;&gt;, &lt;TokenType.DATABASE: &#39;DATABASE&#39;&gt;, &lt;TokenType.INT256: &#39;INT256&#39;&gt;, &lt;TokenType.TIMESTAMPLTZ: &#39;TIMESTAMPLTZ&#39;&gt;, &lt;TokenType.CURRENT_USER: &#39;CURRENT_USER&#39;&gt;, &lt;TokenType.IPV6: &#39;IPV6&#39;&gt;, &lt;TokenType.FINAL: &#39;FINAL&#39;&gt;, &lt;TokenType.UNIQUE: &#39;UNIQUE&#39;&gt;, &lt;TokenType.FOREIGN_KEY: &#39;FOREIGN_KEY&#39;&gt;, &lt;TokenType.UUID: &#39;UUID&#39;&gt;, &lt;TokenType.VARIANT: &#39;VARIANT&#39;&gt;, &lt;TokenType.END: &#39;END&#39;&gt;, &lt;TokenType.MEDIUMINT: &#39;MEDIUMINT&#39;&gt;, &lt;TokenType.ENUM8: &#39;ENUM8&#39;&gt;, &lt;TokenType.UPDATE: &#39;UPDATE&#39;&gt;, &lt;TokenType.NUMMULTIRANGE: &#39;NUMMULTIRANGE&#39;&gt;, &lt;TokenType.PERCENT: &#39;PERCENT&#39;&gt;, &lt;TokenType.ROWVERSION: &#39;ROWVERSION&#39;&gt;, &lt;TokenType.BIGDECIMAL: &#39;BIGDECIMAL&#39;&gt;, &lt;TokenType.NCHAR: &#39;NCHAR&#39;&gt;, &lt;TokenType.KILL: &#39;KILL&#39;&gt;, &lt;TokenType.ANY: &#39;ANY&#39;&gt;, &lt;TokenType.INT: &#39;INT&#39;&gt;, &lt;TokenType.DATETIME64: &#39;DATETIME64&#39;&gt;, &lt;TokenType.VARBINARY: &#39;VARBINARY&#39;&gt;, &lt;TokenType.REPLACE: &#39;REPLACE&#39;&gt;, &lt;TokenType.CASE: &#39;CASE&#39;&gt;, &lt;TokenType.MEDIUMTEXT: &#39;MEDIUMTEXT&#39;&gt;, &lt;TokenType.SOME: &#39;SOME&#39;&gt;, &lt;TokenType.SHOW: &#39;SHOW&#39;&gt;, &lt;TokenType.TIMETZ: &#39;TIMETZ&#39;&gt;, &lt;TokenType.ESCAPE: &#39;ESCAPE&#39;&gt;, &lt;TokenType.CHAR: &#39;CHAR&#39;&gt;, &lt;TokenType.TIMESTAMP: &#39;TIMESTAMP&#39;&gt;, &lt;TokenType.TIMESTAMPTZ: &#39;TIMESTAMPTZ&#39;&gt;, &lt;TokenType.VIEW: &#39;VIEW&#39;&gt;, &lt;TokenType.INT128: &#39;INT128&#39;&gt;, &lt;TokenType.STRUCT: &#39;STRUCT&#39;&gt;, &lt;TokenType.UMEDIUMINT: &#39;UMEDIUMINT&#39;&gt;, &lt;TokenType.TIMESTAMP_NS: &#39;TIMESTAMP_NS&#39;&gt;, &lt;TokenType.TINYTEXT: &#39;TINYTEXT&#39;&gt;, &lt;TokenType.UINT: &#39;UINT&#39;&gt;, &lt;TokenType.SEMI: &#39;SEMI&#39;&gt;, &lt;TokenType.NULLABLE: &#39;NULLABLE&#39;&gt;, &lt;TokenType.REFERENCES: &#39;REFERENCES&#39;&gt;, &lt;TokenType.CURRENT_DATE: &#39;CURRENT_DATE&#39;&gt;, &lt;TokenType.TSMULTIRANGE: &#39;TSMULTIRANGE&#39;&gt;, &lt;TokenType.OPERATOR: &#39;OPERATOR&#39;&gt;, &lt;TokenType.DATETIME: &#39;DATETIME&#39;&gt;, &lt;TokenType.LONGTEXT: &#39;LONGTEXT&#39;&gt;, &lt;TokenType.ROW: &#39;ROW&#39;&gt;, &lt;TokenType.DELETE: &#39;DELETE&#39;&gt;, &lt;TokenType.UINT128: &#39;UINT128&#39;&gt;, &lt;TokenType.DATE32: &#39;DATE32&#39;&gt;, &lt;TokenType.BOOLEAN: &#39;BOOLEAN&#39;&gt;, &lt;TokenType.LOWCARDINALITY: &#39;LOWCARDINALITY&#39;&gt;, &lt;TokenType.RIGHT: &#39;RIGHT&#39;&gt;, &lt;TokenType.DESC: &#39;DESC&#39;&gt;, &lt;TokenType.VAR: &#39;VAR&#39;&gt;, &lt;TokenType.GEOGRAPHY: &#39;GEOGRAPHY&#39;&gt;, &lt;TokenType.UTINYINT: &#39;UTINYINT&#39;&gt;, &lt;TokenType.CURRENT_TIMESTAMP: &#39;CURRENT_TIMESTAMP&#39;&gt;, &lt;TokenType.TIME: &#39;TIME&#39;&gt;, &lt;TokenType.RANGE: &#39;RANGE&#39;&gt;, &lt;TokenType.DECIMAL: &#39;DECIMAL&#39;&gt;, &lt;TokenType.UNKNOWN: &#39;UNKNOWN&#39;&gt;, &lt;TokenType.DATE: &#39;DATE&#39;&gt;, &lt;TokenType.UNIQUEIDENTIFIER: &#39;UNIQUEIDENTIFIER&#39;&gt;, &lt;TokenType.ROWS: &#39;ROWS&#39;&gt;, &lt;TokenType.MAP: &#39;MAP&#39;&gt;, &lt;TokenType.PSEUDO_TYPE: &#39;PSEUDO_TYPE&#39;&gt;, &lt;TokenType.INT8MULTIRANGE: &#39;INT8MULTIRANGE&#39;&gt;, &lt;TokenType.USERDEFINED: &#39;USERDEFINED&#39;&gt;, &lt;TokenType.ENUM16: &#39;ENUM16&#39;&gt;, &lt;TokenType.NVARCHAR: &#39;NVARCHAR&#39;&gt;, &lt;TokenType.COMMENT: &#39;COMMENT&#39;&gt;, &lt;TokenType.REFRESH: &#39;REFRESH&#39;&gt;, &lt;TokenType.BEGIN: &#39;BEGIN&#39;&gt;, &lt;TokenType.ISNULL: &#39;ISNULL&#39;&gt;, &lt;TokenType.EXECUTE: &#39;EXECUTE&#39;&gt;, &lt;TokenType.CACHE: &#39;CACHE&#39;&gt;, &lt;TokenType.APPLY: &#39;APPLY&#39;&gt;, &lt;TokenType.TEMPORARY: &#39;TEMPORARY&#39;&gt;, &lt;TokenType.SCHEMA: &#39;SCHEMA&#39;&gt;, &lt;TokenType.DEFAULT: &#39;DEFAULT&#39;&gt;, &lt;TokenType.FILTER: &#39;FILTER&#39;&gt;, &lt;TokenType.TSRANGE: &#39;TSRANGE&#39;&gt;, &lt;TokenType.UBIGINT: &#39;UBIGINT&#39;&gt;, &lt;TokenType.HLLSKETCH: &#39;HLLSKETCH&#39;&gt;, &lt;TokenType.IS: &#39;IS&#39;&gt;, &lt;TokenType.UDECIMAL: &#39;UDECIMAL&#39;&gt;, &lt;TokenType.NULL: &#39;NULL&#39;&gt;, &lt;TokenType.YEAR: &#39;YEAR&#39;&gt;, &lt;TokenType.NATURAL: &#39;NATURAL&#39;&gt;, &lt;TokenType.MERGE: &#39;MERGE&#39;&gt;, &lt;TokenType.PIVOT: &#39;PIVOT&#39;&gt;, &lt;TokenType.AUTO_INCREMENT: &#39;AUTO_INCREMENT&#39;&gt;, &lt;TokenType.GEOMETRY: &#39;GEOMETRY&#39;&gt;, &lt;TokenType.SMALLINT: &#39;SMALLINT&#39;&gt;, &lt;TokenType.TSTZRANGE: &#39;TSTZRANGE&#39;&gt;, &lt;TokenType.SMALLMONEY: &#39;SMALLMONEY&#39;&gt;, &lt;TokenType.IPADDRESS: &#39;IPADDRESS&#39;&gt;, &lt;TokenType.PARTITION: &#39;PARTITION&#39;&gt;, &lt;TokenType.TOP: &#39;TOP&#39;&gt;, &lt;TokenType.INET: &#39;INET&#39;&gt;, &lt;TokenType.MODEL: &#39;MODEL&#39;&gt;, &lt;TokenType.DICTIONARY: &#39;DICTIONARY&#39;&gt;, &lt;TokenType.USMALLINT: &#39;USMALLINT&#39;&gt;, &lt;TokenType.TIMESTAMP_S: &#39;TIMESTAMP_S&#39;&gt;, &lt;TokenType.OBJECT: &#39;OBJECT&#39;&gt;, &lt;TokenType.BIGSERIAL: &#39;BIGSERIAL&#39;&gt;, &lt;TokenType.ENUM: &#39;ENUM&#39;&gt;, &lt;TokenType.COMMAND: &#39;COMMAND&#39;&gt;, &lt;TokenType.ASC: &#39;ASC&#39;&gt;, &lt;TokenType.NUMRANGE: &#39;NUMRANGE&#39;&gt;, &lt;TokenType.INDEX: &#39;INDEX&#39;&gt;, &lt;TokenType.FORMAT: &#39;FORMAT&#39;&gt;, &lt;TokenType.ANTI: &#39;ANTI&#39;&gt;, &lt;TokenType.SERIAL: &#39;SERIAL&#39;&gt;, &lt;TokenType.BIGINT: &#39;BIGINT&#39;&gt;, &lt;TokenType.OBJECT_IDENTIFIER: &#39;OBJECT_IDENTIFIER&#39;&gt;, &lt;TokenType.FIRST: &#39;FIRST&#39;&gt;, &lt;TokenType.SETTINGS: &#39;SETTINGS&#39;&gt;, &lt;TokenType.INT8RANGE: &#39;INT8RANGE&#39;&gt;, &lt;TokenType.TIMESTAMP_MS: &#39;TIMESTAMP_MS&#39;&gt;, &lt;TokenType.LONGBLOB: &#39;LONGBLOB&#39;&gt;, &lt;TokenType.VARCHAR: &#39;VARCHAR&#39;&gt;, &lt;TokenType.PRAGMA: &#39;PRAGMA&#39;&gt;, &lt;TokenType.IPV4: &#39;IPV4&#39;&gt;, &lt;TokenType.COLUMN: &#39;COLUMN&#39;&gt;, &lt;TokenType.BIT: &#39;BIT&#39;&gt;, &lt;TokenType.XML: &#39;XML&#39;&gt;, &lt;TokenType.BPCHAR: &#39;BPCHAR&#39;&gt;, &lt;TokenType.SIMPLEAGGREGATEFUNCTION: &#39;SIMPLEAGGREGATEFUNCTION&#39;&gt;, &lt;TokenType.IPPREFIX: &#39;IPPREFIX&#39;&gt;, &lt;TokenType.COLLATE: &#39;COLLATE&#39;&gt;, &lt;TokenType.TSTZMULTIRANGE: &#39;TSTZMULTIRANGE&#39;&gt;, &lt;TokenType.DESCRIBE: &#39;DESCRIBE&#39;&gt;, &lt;TokenType.NESTED: &#39;NESTED&#39;&gt;, &lt;TokenType.CURRENT_DATETIME: &#39;CURRENT_DATETIME&#39;&gt;, &lt;TokenType.TINYBLOB: &#39;TINYBLOB&#39;&gt;, &lt;TokenType.FLOAT: &#39;FLOAT&#39;&gt;, &lt;TokenType.NEXT: &#39;NEXT&#39;&gt;, &lt;TokenType.HSTORE: &#39;HSTORE&#39;&gt;, &lt;TokenType.UNPIVOT: &#39;UNPIVOT&#39;&gt;, &lt;TokenType.LOAD: &#39;LOAD&#39;&gt;, &lt;TokenType.TRUE: &#39;TRUE&#39;&gt;, &lt;TokenType.DIV: &#39;DIV&#39;&gt;, &lt;TokenType.FALSE: &#39;FALSE&#39;&gt;, &lt;TokenType.COMMIT: &#39;COMMIT&#39;&gt;, &lt;TokenType.ALL: &#39;ALL&#39;&gt;, &lt;TokenType.IMAGE: &#39;IMAGE&#39;&gt;, &lt;TokenType.OFFSET: &#39;OFFSET&#39;&gt;, &lt;TokenType.FUNCTION: &#39;FUNCTION&#39;&gt;, &lt;TokenType.INT4MULTIRANGE: &#39;INT4MULTIRANGE&#39;&gt;, &lt;TokenType.SUPER: &#39;SUPER&#39;&gt;, &lt;TokenType.ARRAY: &#39;ARRAY&#39;&gt;, &lt;TokenType.SET: &#39;SET&#39;&gt;, &lt;TokenType.UINT256: &#39;UINT256&#39;&gt;, &lt;TokenType.FIXEDSTRING: &#39;FIXEDSTRING&#39;&gt;, &lt;TokenType.KEEP: &#39;KEEP&#39;&gt;, &lt;TokenType.JSONB: &#39;JSONB&#39;&gt;, &lt;TokenType.EXISTS: &#39;EXISTS&#39;&gt;, &lt;TokenType.TABLE: &#39;TABLE&#39;&gt;, &lt;TokenType.TINYINT: &#39;TINYINT&#39;&gt;, &lt;TokenType.DOUBLE: &#39;DOUBLE&#39;&gt;, &lt;TokenType.USE: &#39;USE&#39;&gt;, &lt;TokenType.BINARY: &#39;BINARY&#39;&gt;, &lt;TokenType.DATERANGE: &#39;DATERANGE&#39;&gt;, &lt;TokenType.JSON: &#39;JSON&#39;&gt;, &lt;TokenType.CURRENT_TIME: &#39;CURRENT_TIME&#39;&gt;, &lt;TokenType.FULL: &#39;FULL&#39;&gt;, &lt;TokenType.OVERWRITE: &#39;OVERWRITE&#39;&gt;, &lt;TokenType.SMALLSERIAL: &#39;SMALLSERIAL&#39;&gt;}</span>
</div>
@@ -13190,7 +13216,7 @@ Default: 3</li>
<div id="Parser.UNION_MODIFIERS" class="classattr">
<div class="attr variable">
<span class="name">UNION_MODIFIERS</span> =
-<span class="default_value">{&#39;limit&#39;, &#39;offset&#39;, &#39;order&#39;}</span>
+<span class="default_value">{&#39;order&#39;, &#39;offset&#39;, &#39;limit&#39;}</span>
</div>