Merging upstream version 23.10.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
6cbc5d6f97
commit
49aa147013
91 changed files with 52881 additions and 50396 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -33,6 +33,9 @@
|
|||
<li>
|
||||
<a class="class" href="#PRQL">PRQL</a>
|
||||
<ul class="memberlist">
|
||||
<li>
|
||||
<a class="variable" href="#PRQL.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="class" href="#PRQL.Tokenizer">PRQL.Tokenizer</a>
|
||||
<ul class="memberlist">
|
||||
|
@ -54,6 +57,9 @@
|
|||
<li>
|
||||
<a class="class" href="#PRQL.Parser">PRQL.Parser</a>
|
||||
<ul class="memberlist">
|
||||
<li>
|
||||
<a class="variable" href="#PRQL.Parser.CONJUNCTION">CONJUNCTION</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="variable" href="#PRQL.Parser.TRANSFORM_PARSERS">TRANSFORM_PARSERS</a>
|
||||
</li>
|
||||
|
@ -161,103 +167,147 @@
|
|||
</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="kn">from</span> <span class="nn">sqlglot.tokens</span> <span class="kn">import</span> <span class="n">TokenType</span>
|
||||
</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a>
|
||||
</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a>
|
||||
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="k">class</span> <span class="nc">PRQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
|
||||
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
|
||||
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"`"</span><span class="p">]</span>
|
||||
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"'"</span><span class="p">,</span> <span class="s1">'"'</span><span class="p">]</span>
|
||||
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a>
|
||||
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
|
||||
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="s2">"="</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-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="s2">"'"</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
|
||||
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="s1">'"'</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
|
||||
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a> <span class="s2">"`"</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-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="s2">"#"</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-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="p">}</span>
|
||||
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a>
|
||||
</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
|
||||
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="p">}</span>
|
||||
</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a>
|
||||
</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
|
||||
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a> <span class="n">TRANSFORM_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="s2">"DERIVE"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_selection</span><span class="p">(</span><span class="n">query</span><span class="p">),</span>
|
||||
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="s2">"SELECT"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_selection</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
|
||||
</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="k">def</span> <span class="nf">_select_all</span><span class="p">(</span><span class="n">table</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="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">]:</span>
|
||||
</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a> <span class="k">return</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">table</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="k">if</span> <span class="n">table</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a>
|
||||
</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a>
|
||||
</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="k">class</span> <span class="nc">PRQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
|
||||
</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a> <span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a>
|
||||
</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
|
||||
</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"`"</span><span class="p">]</span>
|
||||
</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"'"</span><span class="p">,</span> <span class="s1">'"'</span><span class="p">]</span>
|
||||
</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a>
|
||||
</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
|
||||
</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a> <span class="s2">"="</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-24"><a href="#L-24"><span class="linenos"> 24</span></a> <span class="s2">"'"</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
|
||||
</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a> <span class="s1">'"'</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
|
||||
</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a> <span class="s2">"`"</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-27"><a href="#L-27"><span class="linenos"> 27</span></a> <span class="s2">"#"</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-28"><a href="#L-28"><span class="linenos"> 28</span></a> <span class="p">}</span>
|
||||
</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a>
|
||||
</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
|
||||
</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a> <span class="p">}</span>
|
||||
</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a>
|
||||
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="k">def</span> <span class="nf">_parse_statement</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="n">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-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query</span><span class="p">()</span>
|
||||
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a>
|
||||
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="k">def</span> <span class="nf">_parse_query</span><span class="p">(</span>
|
||||
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a> <span class="bp">self</span><span class="p">,</span>
|
||||
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">]:</span>
|
||||
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="n">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">()</span>
|
||||
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a>
|
||||
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">from_</span><span class="p">:</span>
|
||||
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="k">return</span> <span class="kc">None</span>
|
||||
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a>
|
||||
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">from_</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a>
|
||||
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="k">while</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">TRANSFORM_PARSERS</span><span class="p">):</span>
|
||||
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORM_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 class="n">query</span><span class="p">)</span>
|
||||
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a>
|
||||
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="k">return</span> <span class="n">query</span>
|
||||
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>
|
||||
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="k">def</span> <span class="nf">_parse_selection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">,</span> <span class="n">append</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">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">:</span>
|
||||
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</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_BRACE</span><span class="p">):</span>
|
||||
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="n">selects</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_expression</span><span class="p">)</span>
|
||||
</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
|
||||
</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a> <span class="n">CONJUNCTION</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">CONJUNCTION</span><span class="p">,</span>
|
||||
</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span><span class="p">,</span>
|
||||
</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">,</span>
|
||||
</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a> <span class="p">}</span>
|
||||
</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a>
|
||||
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="n">TRANSFORM_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="s2">"DERIVE"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_selection</span><span class="p">(</span><span class="n">query</span><span class="p">),</span>
|
||||
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="s2">"SELECT"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_selection</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
|
||||
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="s2">"TAKE"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_take</span><span class="p">(</span><span class="n">query</span><span class="p">),</span>
|
||||
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="s2">"FILTER"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">query</span><span class="o">.</span><span class="n">where</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-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="s2">"APPEND"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">query</span><span class="o">.</span><span class="n">union</span><span class="p">(</span>
|
||||
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="n">_select_all</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">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
|
||||
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="p">),</span>
|
||||
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="s2">"REMOVE"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">query</span><span class="o">.</span><span class="n">except_</span><span class="p">(</span>
|
||||
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">_select_all</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">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
|
||||
</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a> <span class="p">),</span>
|
||||
</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a> <span class="s2">"INTERSECT"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">query</span><span class="o">.</span><span class="n">intersect</span><span class="p">(</span>
|
||||
</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a> <span class="n">_select_all</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">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
|
||||
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="p">),</span>
|
||||
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="s2">"SORT"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order_by</span><span class="p">(</span><span class="n">query</span><span class="p">),</span>
|
||||
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="p">}</span>
|
||||
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>
|
||||
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</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_BRACE</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">query</span><span class="p">):</span>
|
||||
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">"Expecting ]"</span><span class="p">)</span>
|
||||
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="n">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-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[</span><span class="n">expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="p">[]</span>
|
||||
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a>
|
||||
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">projections</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</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="k">else</span> <span class="n">select</span>
|
||||
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">selects</span>
|
||||
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="p">}</span>
|
||||
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="k">def</span> <span class="nf">_parse_statement</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">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-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query</span><span class="p">()</span>
|
||||
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>
|
||||
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="k">def</span> <span class="nf">_parse_query</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">]:</span>
|
||||
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="n">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">()</span>
|
||||
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>
|
||||
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">from_</span><span class="p">:</span>
|
||||
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="k">return</span> <span class="kc">None</span>
|
||||
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>
|
||||
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[</span>
|
||||
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="n">select</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
||||
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span> <span class="p">(</span><span class="n">projections</span><span class="p">[</span><span class="n">s</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">projections</span> <span class="k">else</span> <span class="n">s</span><span class="p">)</span>
|
||||
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">s</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-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="k">else</span> <span class="n">s</span><span class="p">,</span>
|
||||
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="p">)</span>
|
||||
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span>
|
||||
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="p">]</span>
|
||||
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a>
|
||||
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="k">return</span> <span class="n">query</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">selects</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
|
||||
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</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">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</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">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">:</span>
|
||||
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</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="kc">True</span><span class="p">)</span>
|
||||
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</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-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">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 class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
|
||||
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
|
||||
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>
|
||||
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
|
||||
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="bp">self</span><span class="p">,</span>
|
||||
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</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-91"><a href="#L-91"><span class="linenos"> 91</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-92"><a href="#L-92"><span class="linenos"> 92</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-93"><a href="#L-93"><span class="linenos"> 93</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-94"><a href="#L-94"><span class="linenos"> 94</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-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="k">return</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-97"><a href="#L-97"><span class="linenos"> 97</span></a>
|
||||
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
|
||||
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</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-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span 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-101"><a href="#L-101"><span class="linenos">101</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-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="kc">None</span>
|
||||
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>
|
||||
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <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-105"><a href="#L-105"><span class="linenos">105</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-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="p">)</span>
|
||||
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">from_</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>
|
||||
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="k">while</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">TRANSFORM_PARSERS</span><span class="p">):</span>
|
||||
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORM_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 class="n">query</span><span class="p">)</span>
|
||||
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>
|
||||
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="k">return</span> <span class="n">query</span>
|
||||
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a>
|
||||
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="k">def</span> <span class="nf">_parse_selection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">,</span> <span class="n">append</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">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">:</span>
|
||||
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</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_BRACE</span><span class="p">):</span>
|
||||
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">selects</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_expression</span><span class="p">)</span>
|
||||
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a>
|
||||
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</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_BRACE</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">query</span><span class="p">):</span>
|
||||
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">"Expecting }"</span><span class="p">)</span>
|
||||
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">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-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[</span><span class="n">expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="p">[]</span>
|
||||
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>
|
||||
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <span class="n">projections</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</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="k">else</span> <span class="n">select</span>
|
||||
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">selects</span>
|
||||
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="p">}</span>
|
||||
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>
|
||||
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[</span>
|
||||
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a> <span class="n">select</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
||||
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span> <span class="p">(</span><span class="n">projections</span><span class="p">[</span><span class="n">s</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">projections</span> <span class="k">else</span> <span class="n">s</span><span class="p">)</span>
|
||||
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">s</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-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="k">else</span> <span class="n">s</span><span class="p">,</span>
|
||||
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="p">)</span>
|
||||
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span>
|
||||
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="p">]</span>
|
||||
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
|
||||
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="k">return</span> <span class="n">query</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">selects</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a>
|
||||
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="k">def</span> <span class="nf">_parse_take</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">]:</span>
|
||||
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">num</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 class="c1"># TODO: TAKE for ranges a..b</span>
|
||||
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a> <span class="k">return</span> <span class="n">query</span><span class="o">.</span><span class="n">limit</span><span class="p">(</span><span class="n">num</span><span class="p">)</span> <span class="k">if</span> <span class="n">num</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
|
||||
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">def</span> <span class="nf">_parse_ordered</span><span class="p">(</span>
|
||||
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</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">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><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">]:</span>
|
||||
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</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">PLUS</span><span class="p">)</span>
|
||||
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</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">DASH</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-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">term</span> <span class="o">=</span> <span class="n">term</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">(</span><span class="n">parse_method</span><span class="o">=</span><span class="n">parse_method</span><span class="p">)</span>
|
||||
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="k">if</span> <span class="n">term</span> <span class="ow">and</span> <span class="n">desc</span><span class="p">:</span>
|
||||
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">term</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"desc"</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">term</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"nulls_first"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="k">return</span> <span class="n">term</span>
|
||||
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a>
|
||||
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="k">def</span> <span class="nf">_parse_order_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">]:</span>
|
||||
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">l_brace</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_BRACE</span><span class="p">)</span>
|
||||
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</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-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="k">if</span> <span class="n">l_brace</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">R_BRACE</span><span class="p">):</span>
|
||||
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">"Expecting }"</span><span class="p">)</span>
|
||||
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="k">return</span> <span class="n">query</span><span class="o">.</span><span class="n">order_by</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">Order</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">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a>
|
||||
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</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">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</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">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">:</span>
|
||||
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</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="kc">True</span><span class="p">)</span>
|
||||
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</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-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">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 class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
|
||||
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
|
||||
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>
|
||||
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
|
||||
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="bp">self</span><span class="p">,</span>
|
||||
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</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-135"><a href="#L-135"><span class="linenos">135</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-136"><a href="#L-136"><span class="linenos">136</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-137"><a href="#L-137"><span class="linenos">137</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-138"><a href="#L-138"><span class="linenos">138</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-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">return</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-141"><a href="#L-141"><span class="linenos">141</span></a>
|
||||
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
|
||||
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</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-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span 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-145"><a href="#L-145"><span class="linenos">145</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-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">return</span> <span class="kc">None</span>
|
||||
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>
|
||||
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <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-149"><a href="#L-149"><span class="linenos">149</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-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="p">)</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -273,108 +323,162 @@
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#PRQL"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="PRQL-11"><a href="#PRQL-11"><span class="linenos"> 11</span></a><span class="k">class</span> <span class="nc">PRQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
|
||||
</span><span id="PRQL-12"><a href="#PRQL-12"><span class="linenos"> 12</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
|
||||
</span><span id="PRQL-13"><a href="#PRQL-13"><span class="linenos"> 13</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"`"</span><span class="p">]</span>
|
||||
</span><span id="PRQL-14"><a href="#PRQL-14"><span class="linenos"> 14</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"'"</span><span class="p">,</span> <span class="s1">'"'</span><span class="p">]</span>
|
||||
</span><span id="PRQL-15"><a href="#PRQL-15"><span class="linenos"> 15</span></a>
|
||||
</span><span id="PRQL-16"><a href="#PRQL-16"><span class="linenos"> 16</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL-17"><a href="#PRQL-17"><span class="linenos"> 17</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
|
||||
</span><span id="PRQL-18"><a href="#PRQL-18"><span class="linenos"> 18</span></a> <span class="s2">"="</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="PRQL-19"><a href="#PRQL-19"><span class="linenos"> 19</span></a> <span class="s2">"'"</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
|
||||
</span><span id="PRQL-20"><a href="#PRQL-20"><span class="linenos"> 20</span></a> <span class="s1">'"'</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
|
||||
</span><span id="PRQL-21"><a href="#PRQL-21"><span class="linenos"> 21</span></a> <span class="s2">"`"</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="PRQL-22"><a href="#PRQL-22"><span class="linenos"> 22</span></a> <span class="s2">"#"</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="PRQL-23"><a href="#PRQL-23"><span class="linenos"> 23</span></a> <span class="p">}</span>
|
||||
</span><span id="PRQL-24"><a href="#PRQL-24"><span class="linenos"> 24</span></a>
|
||||
</span><span id="PRQL-25"><a href="#PRQL-25"><span class="linenos"> 25</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL-26"><a href="#PRQL-26"><span class="linenos"> 26</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
|
||||
</span><span id="PRQL-27"><a href="#PRQL-27"><span class="linenos"> 27</span></a> <span class="p">}</span>
|
||||
</span><span id="PRQL-28"><a href="#PRQL-28"><span class="linenos"> 28</span></a>
|
||||
</span><span id="PRQL-29"><a href="#PRQL-29"><span class="linenos"> 29</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
|
||||
</span><span id="PRQL-30"><a href="#PRQL-30"><span class="linenos"> 30</span></a> <span class="n">TRANSFORM_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL-31"><a href="#PRQL-31"><span class="linenos"> 31</span></a> <span class="s2">"DERIVE"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_selection</span><span class="p">(</span><span class="n">query</span><span class="p">),</span>
|
||||
</span><span id="PRQL-32"><a href="#PRQL-32"><span class="linenos"> 32</span></a> <span class="s2">"SELECT"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_selection</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="PRQL-15"><a href="#PRQL-15"><span class="linenos"> 15</span></a><span class="k">class</span> <span class="nc">PRQL</span><span class="p">(</span><span class="n">Dialect</span><span class="p">):</span>
|
||||
</span><span id="PRQL-16"><a href="#PRQL-16"><span class="linenos"> 16</span></a> <span class="n">DPIPE_IS_STRING_CONCAT</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
</span><span id="PRQL-17"><a href="#PRQL-17"><span class="linenos"> 17</span></a>
|
||||
</span><span id="PRQL-18"><a href="#PRQL-18"><span class="linenos"> 18</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
|
||||
</span><span id="PRQL-19"><a href="#PRQL-19"><span class="linenos"> 19</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"`"</span><span class="p">]</span>
|
||||
</span><span id="PRQL-20"><a href="#PRQL-20"><span class="linenos"> 20</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"'"</span><span class="p">,</span> <span class="s1">'"'</span><span class="p">]</span>
|
||||
</span><span id="PRQL-21"><a href="#PRQL-21"><span class="linenos"> 21</span></a>
|
||||
</span><span id="PRQL-22"><a href="#PRQL-22"><span class="linenos"> 22</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL-23"><a href="#PRQL-23"><span class="linenos"> 23</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
|
||||
</span><span id="PRQL-24"><a href="#PRQL-24"><span class="linenos"> 24</span></a> <span class="s2">"="</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="PRQL-25"><a href="#PRQL-25"><span class="linenos"> 25</span></a> <span class="s2">"'"</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
|
||||
</span><span id="PRQL-26"><a href="#PRQL-26"><span class="linenos"> 26</span></a> <span class="s1">'"'</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
|
||||
</span><span id="PRQL-27"><a href="#PRQL-27"><span class="linenos"> 27</span></a> <span class="s2">"`"</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="PRQL-28"><a href="#PRQL-28"><span class="linenos"> 28</span></a> <span class="s2">"#"</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="PRQL-29"><a href="#PRQL-29"><span class="linenos"> 29</span></a> <span class="p">}</span>
|
||||
</span><span id="PRQL-30"><a href="#PRQL-30"><span class="linenos"> 30</span></a>
|
||||
</span><span id="PRQL-31"><a href="#PRQL-31"><span class="linenos"> 31</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL-32"><a href="#PRQL-32"><span class="linenos"> 32</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
|
||||
</span><span id="PRQL-33"><a href="#PRQL-33"><span class="linenos"> 33</span></a> <span class="p">}</span>
|
||||
</span><span id="PRQL-34"><a href="#PRQL-34"><span class="linenos"> 34</span></a>
|
||||
</span><span id="PRQL-35"><a href="#PRQL-35"><span class="linenos"> 35</span></a> <span class="k">def</span> <span class="nf">_parse_statement</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
|
||||
</span><span id="PRQL-36"><a href="#PRQL-36"><span class="linenos"> 36</span></a> <span class="n">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="PRQL-37"><a href="#PRQL-37"><span class="linenos"> 37</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query</span><span class="p">()</span>
|
||||
</span><span id="PRQL-38"><a href="#PRQL-38"><span class="linenos"> 38</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="PRQL-39"><a href="#PRQL-39"><span class="linenos"> 39</span></a>
|
||||
</span><span id="PRQL-40"><a href="#PRQL-40"><span class="linenos"> 40</span></a> <span class="k">def</span> <span class="nf">_parse_query</span><span class="p">(</span>
|
||||
</span><span id="PRQL-41"><a href="#PRQL-41"><span class="linenos"> 41</span></a> <span class="bp">self</span><span class="p">,</span>
|
||||
</span><span id="PRQL-42"><a href="#PRQL-42"><span class="linenos"> 42</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">]:</span>
|
||||
</span><span id="PRQL-43"><a href="#PRQL-43"><span class="linenos"> 43</span></a> <span class="n">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">()</span>
|
||||
</span><span id="PRQL-44"><a href="#PRQL-44"><span class="linenos"> 44</span></a>
|
||||
</span><span id="PRQL-45"><a href="#PRQL-45"><span class="linenos"> 45</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">from_</span><span class="p">:</span>
|
||||
</span><span id="PRQL-46"><a href="#PRQL-46"><span class="linenos"> 46</span></a> <span class="k">return</span> <span class="kc">None</span>
|
||||
</span><span id="PRQL-47"><a href="#PRQL-47"><span class="linenos"> 47</span></a>
|
||||
</span><span id="PRQL-48"><a href="#PRQL-48"><span class="linenos"> 48</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">from_</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="PRQL-49"><a href="#PRQL-49"><span class="linenos"> 49</span></a>
|
||||
</span><span id="PRQL-50"><a href="#PRQL-50"><span class="linenos"> 50</span></a> <span class="k">while</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">TRANSFORM_PARSERS</span><span class="p">):</span>
|
||||
</span><span id="PRQL-51"><a href="#PRQL-51"><span class="linenos"> 51</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORM_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 class="n">query</span><span class="p">)</span>
|
||||
</span><span id="PRQL-52"><a href="#PRQL-52"><span class="linenos"> 52</span></a>
|
||||
</span><span id="PRQL-53"><a href="#PRQL-53"><span class="linenos"> 53</span></a> <span class="k">return</span> <span class="n">query</span>
|
||||
</span><span id="PRQL-54"><a href="#PRQL-54"><span class="linenos"> 54</span></a>
|
||||
</span><span id="PRQL-55"><a href="#PRQL-55"><span class="linenos"> 55</span></a> <span class="k">def</span> <span class="nf">_parse_selection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">,</span> <span class="n">append</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">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">:</span>
|
||||
</span><span id="PRQL-56"><a href="#PRQL-56"><span class="linenos"> 56</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_BRACE</span><span class="p">):</span>
|
||||
</span><span id="PRQL-57"><a href="#PRQL-57"><span class="linenos"> 57</span></a> <span class="n">selects</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_expression</span><span class="p">)</span>
|
||||
</span><span id="PRQL-35"><a href="#PRQL-35"><span class="linenos"> 35</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
|
||||
</span><span id="PRQL-36"><a href="#PRQL-36"><span class="linenos"> 36</span></a> <span class="n">CONJUNCTION</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL-37"><a href="#PRQL-37"><span class="linenos"> 37</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">CONJUNCTION</span><span class="p">,</span>
|
||||
</span><span id="PRQL-38"><a href="#PRQL-38"><span class="linenos"> 38</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span><span class="p">,</span>
|
||||
</span><span id="PRQL-39"><a href="#PRQL-39"><span class="linenos"> 39</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">,</span>
|
||||
</span><span id="PRQL-40"><a href="#PRQL-40"><span class="linenos"> 40</span></a> <span class="p">}</span>
|
||||
</span><span id="PRQL-41"><a href="#PRQL-41"><span class="linenos"> 41</span></a>
|
||||
</span><span id="PRQL-42"><a href="#PRQL-42"><span class="linenos"> 42</span></a> <span class="n">TRANSFORM_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL-43"><a href="#PRQL-43"><span class="linenos"> 43</span></a> <span class="s2">"DERIVE"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_selection</span><span class="p">(</span><span class="n">query</span><span class="p">),</span>
|
||||
</span><span id="PRQL-44"><a href="#PRQL-44"><span class="linenos"> 44</span></a> <span class="s2">"SELECT"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_selection</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
|
||||
</span><span id="PRQL-45"><a href="#PRQL-45"><span class="linenos"> 45</span></a> <span class="s2">"TAKE"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_take</span><span class="p">(</span><span class="n">query</span><span class="p">),</span>
|
||||
</span><span id="PRQL-46"><a href="#PRQL-46"><span class="linenos"> 46</span></a> <span class="s2">"FILTER"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">query</span><span class="o">.</span><span class="n">where</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="PRQL-47"><a href="#PRQL-47"><span class="linenos"> 47</span></a> <span class="s2">"APPEND"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">query</span><span class="o">.</span><span class="n">union</span><span class="p">(</span>
|
||||
</span><span id="PRQL-48"><a href="#PRQL-48"><span class="linenos"> 48</span></a> <span class="n">_select_all</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">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
|
||||
</span><span id="PRQL-49"><a href="#PRQL-49"><span class="linenos"> 49</span></a> <span class="p">),</span>
|
||||
</span><span id="PRQL-50"><a href="#PRQL-50"><span class="linenos"> 50</span></a> <span class="s2">"REMOVE"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">query</span><span class="o">.</span><span class="n">except_</span><span class="p">(</span>
|
||||
</span><span id="PRQL-51"><a href="#PRQL-51"><span class="linenos"> 51</span></a> <span class="n">_select_all</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">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
|
||||
</span><span id="PRQL-52"><a href="#PRQL-52"><span class="linenos"> 52</span></a> <span class="p">),</span>
|
||||
</span><span id="PRQL-53"><a href="#PRQL-53"><span class="linenos"> 53</span></a> <span class="s2">"INTERSECT"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">query</span><span class="o">.</span><span class="n">intersect</span><span class="p">(</span>
|
||||
</span><span id="PRQL-54"><a href="#PRQL-54"><span class="linenos"> 54</span></a> <span class="n">_select_all</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">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
|
||||
</span><span id="PRQL-55"><a href="#PRQL-55"><span class="linenos"> 55</span></a> <span class="p">),</span>
|
||||
</span><span id="PRQL-56"><a href="#PRQL-56"><span class="linenos"> 56</span></a> <span class="s2">"SORT"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order_by</span><span class="p">(</span><span class="n">query</span><span class="p">),</span>
|
||||
</span><span id="PRQL-57"><a href="#PRQL-57"><span class="linenos"> 57</span></a> <span class="p">}</span>
|
||||
</span><span id="PRQL-58"><a href="#PRQL-58"><span class="linenos"> 58</span></a>
|
||||
</span><span id="PRQL-59"><a href="#PRQL-59"><span class="linenos"> 59</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_BRACE</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">query</span><span class="p">):</span>
|
||||
</span><span id="PRQL-60"><a href="#PRQL-60"><span class="linenos"> 60</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">"Expecting ]"</span><span class="p">)</span>
|
||||
</span><span id="PRQL-61"><a href="#PRQL-61"><span class="linenos"> 61</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="PRQL-62"><a href="#PRQL-62"><span class="linenos"> 62</span></a> <span class="n">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="PRQL-63"><a href="#PRQL-63"><span class="linenos"> 63</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[</span><span class="n">expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="p">[]</span>
|
||||
</span><span id="PRQL-64"><a href="#PRQL-64"><span class="linenos"> 64</span></a>
|
||||
</span><span id="PRQL-65"><a href="#PRQL-65"><span class="linenos"> 65</span></a> <span class="n">projections</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL-66"><a href="#PRQL-66"><span class="linenos"> 66</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</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="k">else</span> <span class="n">select</span>
|
||||
</span><span id="PRQL-67"><a href="#PRQL-67"><span class="linenos"> 67</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">selects</span>
|
||||
</span><span id="PRQL-68"><a href="#PRQL-68"><span class="linenos"> 68</span></a> <span class="p">}</span>
|
||||
</span><span id="PRQL-59"><a href="#PRQL-59"><span class="linenos"> 59</span></a> <span class="k">def</span> <span class="nf">_parse_statement</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
|
||||
</span><span id="PRQL-60"><a href="#PRQL-60"><span class="linenos"> 60</span></a> <span class="n">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="PRQL-61"><a href="#PRQL-61"><span class="linenos"> 61</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query</span><span class="p">()</span>
|
||||
</span><span id="PRQL-62"><a href="#PRQL-62"><span class="linenos"> 62</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="PRQL-63"><a href="#PRQL-63"><span class="linenos"> 63</span></a>
|
||||
</span><span id="PRQL-64"><a href="#PRQL-64"><span class="linenos"> 64</span></a> <span class="k">def</span> <span class="nf">_parse_query</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">]:</span>
|
||||
</span><span id="PRQL-65"><a href="#PRQL-65"><span class="linenos"> 65</span></a> <span class="n">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">()</span>
|
||||
</span><span id="PRQL-66"><a href="#PRQL-66"><span class="linenos"> 66</span></a>
|
||||
</span><span id="PRQL-67"><a href="#PRQL-67"><span class="linenos"> 67</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">from_</span><span class="p">:</span>
|
||||
</span><span id="PRQL-68"><a href="#PRQL-68"><span class="linenos"> 68</span></a> <span class="k">return</span> <span class="kc">None</span>
|
||||
</span><span id="PRQL-69"><a href="#PRQL-69"><span class="linenos"> 69</span></a>
|
||||
</span><span id="PRQL-70"><a href="#PRQL-70"><span class="linenos"> 70</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[</span>
|
||||
</span><span id="PRQL-71"><a href="#PRQL-71"><span class="linenos"> 71</span></a> <span class="n">select</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
||||
</span><span id="PRQL-72"><a href="#PRQL-72"><span class="linenos"> 72</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span> <span class="p">(</span><span class="n">projections</span><span class="p">[</span><span class="n">s</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">projections</span> <span class="k">else</span> <span class="n">s</span><span class="p">)</span>
|
||||
</span><span id="PRQL-73"><a href="#PRQL-73"><span class="linenos"> 73</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">s</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="PRQL-74"><a href="#PRQL-74"><span class="linenos"> 74</span></a> <span class="k">else</span> <span class="n">s</span><span class="p">,</span>
|
||||
</span><span id="PRQL-75"><a href="#PRQL-75"><span class="linenos"> 75</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
</span><span id="PRQL-76"><a href="#PRQL-76"><span class="linenos"> 76</span></a> <span class="p">)</span>
|
||||
</span><span id="PRQL-77"><a href="#PRQL-77"><span class="linenos"> 77</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span>
|
||||
</span><span id="PRQL-78"><a href="#PRQL-78"><span class="linenos"> 78</span></a> <span class="p">]</span>
|
||||
</span><span id="PRQL-79"><a href="#PRQL-79"><span class="linenos"> 79</span></a>
|
||||
</span><span id="PRQL-80"><a href="#PRQL-80"><span class="linenos"> 80</span></a> <span class="k">return</span> <span class="n">query</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">selects</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="PRQL-81"><a href="#PRQL-81"><span class="linenos"> 81</span></a>
|
||||
</span><span id="PRQL-82"><a href="#PRQL-82"><span class="linenos"> 82</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">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
|
||||
</span><span id="PRQL-83"><a href="#PRQL-83"><span class="linenos"> 83</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</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">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">:</span>
|
||||
</span><span id="PRQL-84"><a href="#PRQL-84"><span class="linenos"> 84</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="kc">True</span><span class="p">)</span>
|
||||
</span><span id="PRQL-85"><a href="#PRQL-85"><span class="linenos"> 85</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="PRQL-86"><a href="#PRQL-86"><span class="linenos"> 86</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">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 class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
|
||||
</span><span id="PRQL-87"><a href="#PRQL-87"><span class="linenos"> 87</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
|
||||
</span><span id="PRQL-88"><a href="#PRQL-88"><span class="linenos"> 88</span></a>
|
||||
</span><span id="PRQL-89"><a href="#PRQL-89"><span class="linenos"> 89</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
|
||||
</span><span id="PRQL-90"><a href="#PRQL-90"><span class="linenos"> 90</span></a> <span class="bp">self</span><span class="p">,</span>
|
||||
</span><span id="PRQL-91"><a href="#PRQL-91"><span class="linenos"> 91</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="PRQL-92"><a href="#PRQL-92"><span class="linenos"> 92</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="PRQL-93"><a href="#PRQL-93"><span class="linenos"> 93</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="PRQL-94"><a href="#PRQL-94"><span class="linenos"> 94</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="PRQL-95"><a href="#PRQL-95"><span class="linenos"> 95</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="PRQL-96"><a href="#PRQL-96"><span class="linenos"> 96</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
|
||||
</span><span id="PRQL-97"><a href="#PRQL-97"><span class="linenos"> 97</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">()</span>
|
||||
</span><span id="PRQL-98"><a href="#PRQL-98"><span class="linenos"> 98</span></a>
|
||||
</span><span id="PRQL-99"><a href="#PRQL-99"><span class="linenos"> 99</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
|
||||
</span><span id="PRQL-100"><a href="#PRQL-100"><span class="linenos">100</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="PRQL-101"><a href="#PRQL-101"><span class="linenos">101</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span 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="PRQL-102"><a href="#PRQL-102"><span class="linenos">102</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="PRQL-103"><a href="#PRQL-103"><span class="linenos">103</span></a> <span class="k">return</span> <span class="kc">None</span>
|
||||
</span><span id="PRQL-104"><a href="#PRQL-104"><span class="linenos">104</span></a>
|
||||
</span><span id="PRQL-105"><a href="#PRQL-105"><span class="linenos">105</span></a> <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="PRQL-106"><a href="#PRQL-106"><span class="linenos">106</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="PRQL-107"><a href="#PRQL-107"><span class="linenos">107</span></a> <span class="p">)</span>
|
||||
</span><span id="PRQL-70"><a href="#PRQL-70"><span class="linenos"> 70</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">from_</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="PRQL-71"><a href="#PRQL-71"><span class="linenos"> 71</span></a>
|
||||
</span><span id="PRQL-72"><a href="#PRQL-72"><span class="linenos"> 72</span></a> <span class="k">while</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">TRANSFORM_PARSERS</span><span class="p">):</span>
|
||||
</span><span id="PRQL-73"><a href="#PRQL-73"><span class="linenos"> 73</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORM_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 class="n">query</span><span class="p">)</span>
|
||||
</span><span id="PRQL-74"><a href="#PRQL-74"><span class="linenos"> 74</span></a>
|
||||
</span><span id="PRQL-75"><a href="#PRQL-75"><span class="linenos"> 75</span></a> <span class="k">return</span> <span class="n">query</span>
|
||||
</span><span id="PRQL-76"><a href="#PRQL-76"><span class="linenos"> 76</span></a>
|
||||
</span><span id="PRQL-77"><a href="#PRQL-77"><span class="linenos"> 77</span></a> <span class="k">def</span> <span class="nf">_parse_selection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">,</span> <span class="n">append</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">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">:</span>
|
||||
</span><span id="PRQL-78"><a href="#PRQL-78"><span class="linenos"> 78</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_BRACE</span><span class="p">):</span>
|
||||
</span><span id="PRQL-79"><a href="#PRQL-79"><span class="linenos"> 79</span></a> <span class="n">selects</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_expression</span><span class="p">)</span>
|
||||
</span><span id="PRQL-80"><a href="#PRQL-80"><span class="linenos"> 80</span></a>
|
||||
</span><span id="PRQL-81"><a href="#PRQL-81"><span class="linenos"> 81</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_BRACE</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">query</span><span class="p">):</span>
|
||||
</span><span id="PRQL-82"><a href="#PRQL-82"><span class="linenos"> 82</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">"Expecting }"</span><span class="p">)</span>
|
||||
</span><span id="PRQL-83"><a href="#PRQL-83"><span class="linenos"> 83</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="PRQL-84"><a href="#PRQL-84"><span class="linenos"> 84</span></a> <span class="n">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="PRQL-85"><a href="#PRQL-85"><span class="linenos"> 85</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[</span><span class="n">expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="p">[]</span>
|
||||
</span><span id="PRQL-86"><a href="#PRQL-86"><span class="linenos"> 86</span></a>
|
||||
</span><span id="PRQL-87"><a href="#PRQL-87"><span class="linenos"> 87</span></a> <span class="n">projections</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL-88"><a href="#PRQL-88"><span class="linenos"> 88</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</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="k">else</span> <span class="n">select</span>
|
||||
</span><span id="PRQL-89"><a href="#PRQL-89"><span class="linenos"> 89</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">selects</span>
|
||||
</span><span id="PRQL-90"><a href="#PRQL-90"><span class="linenos"> 90</span></a> <span class="p">}</span>
|
||||
</span><span id="PRQL-91"><a href="#PRQL-91"><span class="linenos"> 91</span></a>
|
||||
</span><span id="PRQL-92"><a href="#PRQL-92"><span class="linenos"> 92</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[</span>
|
||||
</span><span id="PRQL-93"><a href="#PRQL-93"><span class="linenos"> 93</span></a> <span class="n">select</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
||||
</span><span id="PRQL-94"><a href="#PRQL-94"><span class="linenos"> 94</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span> <span class="p">(</span><span class="n">projections</span><span class="p">[</span><span class="n">s</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">projections</span> <span class="k">else</span> <span class="n">s</span><span class="p">)</span>
|
||||
</span><span id="PRQL-95"><a href="#PRQL-95"><span class="linenos"> 95</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">s</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="PRQL-96"><a href="#PRQL-96"><span class="linenos"> 96</span></a> <span class="k">else</span> <span class="n">s</span><span class="p">,</span>
|
||||
</span><span id="PRQL-97"><a href="#PRQL-97"><span class="linenos"> 97</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
</span><span id="PRQL-98"><a href="#PRQL-98"><span class="linenos"> 98</span></a> <span class="p">)</span>
|
||||
</span><span id="PRQL-99"><a href="#PRQL-99"><span class="linenos"> 99</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span>
|
||||
</span><span id="PRQL-100"><a href="#PRQL-100"><span class="linenos">100</span></a> <span class="p">]</span>
|
||||
</span><span id="PRQL-101"><a href="#PRQL-101"><span class="linenos">101</span></a>
|
||||
</span><span id="PRQL-102"><a href="#PRQL-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="n">query</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">selects</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="PRQL-103"><a href="#PRQL-103"><span class="linenos">103</span></a>
|
||||
</span><span id="PRQL-104"><a href="#PRQL-104"><span class="linenos">104</span></a> <span class="k">def</span> <span class="nf">_parse_take</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">]:</span>
|
||||
</span><span id="PRQL-105"><a href="#PRQL-105"><span class="linenos">105</span></a> <span class="n">num</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 class="c1"># TODO: TAKE for ranges a..b</span>
|
||||
</span><span id="PRQL-106"><a href="#PRQL-106"><span class="linenos">106</span></a> <span class="k">return</span> <span class="n">query</span><span class="o">.</span><span class="n">limit</span><span class="p">(</span><span class="n">num</span><span class="p">)</span> <span class="k">if</span> <span class="n">num</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="PRQL-107"><a href="#PRQL-107"><span class="linenos">107</span></a>
|
||||
</span><span id="PRQL-108"><a href="#PRQL-108"><span class="linenos">108</span></a> <span class="k">def</span> <span class="nf">_parse_ordered</span><span class="p">(</span>
|
||||
</span><span id="PRQL-109"><a href="#PRQL-109"><span class="linenos">109</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">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><span id="PRQL-110"><a href="#PRQL-110"><span class="linenos">110</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">]:</span>
|
||||
</span><span id="PRQL-111"><a href="#PRQL-111"><span class="linenos">111</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">PLUS</span><span class="p">)</span>
|
||||
</span><span id="PRQL-112"><a href="#PRQL-112"><span class="linenos">112</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">DASH</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="PRQL-113"><a href="#PRQL-113"><span class="linenos">113</span></a> <span class="n">term</span> <span class="o">=</span> <span class="n">term</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">(</span><span class="n">parse_method</span><span class="o">=</span><span class="n">parse_method</span><span class="p">)</span>
|
||||
</span><span id="PRQL-114"><a href="#PRQL-114"><span class="linenos">114</span></a> <span class="k">if</span> <span class="n">term</span> <span class="ow">and</span> <span class="n">desc</span><span class="p">:</span>
|
||||
</span><span id="PRQL-115"><a href="#PRQL-115"><span class="linenos">115</span></a> <span class="n">term</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"desc"</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="PRQL-116"><a href="#PRQL-116"><span class="linenos">116</span></a> <span class="n">term</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"nulls_first"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="PRQL-117"><a href="#PRQL-117"><span class="linenos">117</span></a> <span class="k">return</span> <span class="n">term</span>
|
||||
</span><span id="PRQL-118"><a href="#PRQL-118"><span class="linenos">118</span></a>
|
||||
</span><span id="PRQL-119"><a href="#PRQL-119"><span class="linenos">119</span></a> <span class="k">def</span> <span class="nf">_parse_order_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">]:</span>
|
||||
</span><span id="PRQL-120"><a href="#PRQL-120"><span class="linenos">120</span></a> <span class="n">l_brace</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_BRACE</span><span class="p">)</span>
|
||||
</span><span id="PRQL-121"><a href="#PRQL-121"><span class="linenos">121</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="PRQL-122"><a href="#PRQL-122"><span class="linenos">122</span></a> <span class="k">if</span> <span class="n">l_brace</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">R_BRACE</span><span class="p">):</span>
|
||||
</span><span id="PRQL-123"><a href="#PRQL-123"><span class="linenos">123</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">"Expecting }"</span><span class="p">)</span>
|
||||
</span><span id="PRQL-124"><a href="#PRQL-124"><span class="linenos">124</span></a> <span class="k">return</span> <span class="n">query</span><span class="o">.</span><span class="n">order_by</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">Order</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">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="PRQL-125"><a href="#PRQL-125"><span class="linenos">125</span></a>
|
||||
</span><span id="PRQL-126"><a href="#PRQL-126"><span class="linenos">126</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">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
|
||||
</span><span id="PRQL-127"><a href="#PRQL-127"><span class="linenos">127</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</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">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">:</span>
|
||||
</span><span id="PRQL-128"><a href="#PRQL-128"><span class="linenos">128</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="kc">True</span><span class="p">)</span>
|
||||
</span><span id="PRQL-129"><a href="#PRQL-129"><span class="linenos">129</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="PRQL-130"><a href="#PRQL-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">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 class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
|
||||
</span><span id="PRQL-131"><a href="#PRQL-131"><span class="linenos">131</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
|
||||
</span><span id="PRQL-132"><a href="#PRQL-132"><span class="linenos">132</span></a>
|
||||
</span><span id="PRQL-133"><a href="#PRQL-133"><span class="linenos">133</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
|
||||
</span><span id="PRQL-134"><a href="#PRQL-134"><span class="linenos">134</span></a> <span class="bp">self</span><span class="p">,</span>
|
||||
</span><span id="PRQL-135"><a href="#PRQL-135"><span class="linenos">135</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="PRQL-136"><a href="#PRQL-136"><span class="linenos">136</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="PRQL-137"><a href="#PRQL-137"><span class="linenos">137</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="PRQL-138"><a href="#PRQL-138"><span class="linenos">138</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="PRQL-139"><a href="#PRQL-139"><span class="linenos">139</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="PRQL-140"><a href="#PRQL-140"><span class="linenos">140</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
|
||||
</span><span id="PRQL-141"><a href="#PRQL-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">()</span>
|
||||
</span><span id="PRQL-142"><a href="#PRQL-142"><span class="linenos">142</span></a>
|
||||
</span><span id="PRQL-143"><a href="#PRQL-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
|
||||
</span><span id="PRQL-144"><a href="#PRQL-144"><span class="linenos">144</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="PRQL-145"><a href="#PRQL-145"><span class="linenos">145</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span 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="PRQL-146"><a href="#PRQL-146"><span class="linenos">146</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="PRQL-147"><a href="#PRQL-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="kc">None</span>
|
||||
</span><span id="PRQL-148"><a href="#PRQL-148"><span class="linenos">148</span></a>
|
||||
</span><span id="PRQL-149"><a href="#PRQL-149"><span class="linenos">149</span></a> <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="PRQL-150"><a href="#PRQL-150"><span class="linenos">150</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="PRQL-151"><a href="#PRQL-151"><span class="linenos">151</span></a> <span class="p">)</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="PRQL.DPIPE_IS_STRING_CONCAT" class="classattr">
|
||||
<div class="attr variable">
|
||||
<span class="name">DPIPE_IS_STRING_CONCAT</span> =
|
||||
<span class="default_value">False</span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#PRQL.DPIPE_IS_STRING_CONCAT"></a>
|
||||
|
||||
<div class="docstring"><p>Whether the DPIPE token (<code>||</code>) is a string concatenation operator.</p>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div id="PRQL.tokenizer_class" class="classattr">
|
||||
<div class="attr variable">
|
||||
<span class="name">tokenizer_class</span> =
|
||||
|
@ -627,7 +731,6 @@
|
|||
<dd id="PRQL.TABLESAMPLE_SIZE_IS_PERCENT" class="variable"><a href="dialect.html#Dialect.TABLESAMPLE_SIZE_IS_PERCENT">TABLESAMPLE_SIZE_IS_PERCENT</a></dd>
|
||||
<dd id="PRQL.NORMALIZATION_STRATEGY" class="variable"><a href="dialect.html#Dialect.NORMALIZATION_STRATEGY">NORMALIZATION_STRATEGY</a></dd>
|
||||
<dd id="PRQL.IDENTIFIERS_CAN_START_WITH_DIGIT" class="variable"><a href="dialect.html#Dialect.IDENTIFIERS_CAN_START_WITH_DIGIT">IDENTIFIERS_CAN_START_WITH_DIGIT</a></dd>
|
||||
<dd id="PRQL.DPIPE_IS_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.DPIPE_IS_STRING_CONCAT">DPIPE_IS_STRING_CONCAT</a></dd>
|
||||
<dd id="PRQL.STRICT_STRING_CONCAT" class="variable"><a href="dialect.html#Dialect.STRICT_STRING_CONCAT">STRICT_STRING_CONCAT</a></dd>
|
||||
<dd id="PRQL.SUPPORTS_USER_DEFINED_TYPES" class="variable"><a href="dialect.html#Dialect.SUPPORTS_USER_DEFINED_TYPES">SUPPORTS_USER_DEFINED_TYPES</a></dd>
|
||||
<dd id="PRQL.SUPPORTS_SEMI_ANTI_JOIN" class="variable"><a href="dialect.html#Dialect.SUPPORTS_SEMI_ANTI_JOIN">SUPPORTS_SEMI_ANTI_JOIN</a></dd>
|
||||
|
@ -676,22 +779,22 @@
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#PRQL.Tokenizer"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="PRQL.Tokenizer-12"><a href="#PRQL.Tokenizer-12"><span class="linenos">12</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
|
||||
</span><span id="PRQL.Tokenizer-13"><a href="#PRQL.Tokenizer-13"><span class="linenos">13</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"`"</span><span class="p">]</span>
|
||||
</span><span id="PRQL.Tokenizer-14"><a href="#PRQL.Tokenizer-14"><span class="linenos">14</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"'"</span><span class="p">,</span> <span class="s1">'"'</span><span class="p">]</span>
|
||||
</span><span id="PRQL.Tokenizer-15"><a href="#PRQL.Tokenizer-15"><span class="linenos">15</span></a>
|
||||
</span><span id="PRQL.Tokenizer-16"><a href="#PRQL.Tokenizer-16"><span class="linenos">16</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL.Tokenizer-17"><a href="#PRQL.Tokenizer-17"><span class="linenos">17</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Tokenizer-18"><a href="#PRQL.Tokenizer-18"><span class="linenos">18</span></a> <span class="s2">"="</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="PRQL.Tokenizer-19"><a href="#PRQL.Tokenizer-19"><span class="linenos">19</span></a> <span class="s2">"'"</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Tokenizer-20"><a href="#PRQL.Tokenizer-20"><span class="linenos">20</span></a> <span class="s1">'"'</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Tokenizer-21"><a href="#PRQL.Tokenizer-21"><span class="linenos">21</span></a> <span class="s2">"`"</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="PRQL.Tokenizer-22"><a href="#PRQL.Tokenizer-22"><span class="linenos">22</span></a> <span class="s2">"#"</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="PRQL.Tokenizer-23"><a href="#PRQL.Tokenizer-23"><span class="linenos">23</span></a> <span class="p">}</span>
|
||||
</span><span id="PRQL.Tokenizer-24"><a href="#PRQL.Tokenizer-24"><span class="linenos">24</span></a>
|
||||
</span><span id="PRQL.Tokenizer-25"><a href="#PRQL.Tokenizer-25"><span class="linenos">25</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL.Tokenizer-26"><a href="#PRQL.Tokenizer-26"><span class="linenos">26</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Tokenizer-27"><a href="#PRQL.Tokenizer-27"><span class="linenos">27</span></a> <span class="p">}</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="PRQL.Tokenizer-18"><a href="#PRQL.Tokenizer-18"><span class="linenos">18</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
|
||||
</span><span id="PRQL.Tokenizer-19"><a href="#PRQL.Tokenizer-19"><span class="linenos">19</span></a> <span class="n">IDENTIFIERS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"`"</span><span class="p">]</span>
|
||||
</span><span id="PRQL.Tokenizer-20"><a href="#PRQL.Tokenizer-20"><span class="linenos">20</span></a> <span class="n">QUOTES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"'"</span><span class="p">,</span> <span class="s1">'"'</span><span class="p">]</span>
|
||||
</span><span id="PRQL.Tokenizer-21"><a href="#PRQL.Tokenizer-21"><span class="linenos">21</span></a>
|
||||
</span><span id="PRQL.Tokenizer-22"><a href="#PRQL.Tokenizer-22"><span class="linenos">22</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL.Tokenizer-23"><a href="#PRQL.Tokenizer-23"><span class="linenos">23</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Tokenizer-24"><a href="#PRQL.Tokenizer-24"><span class="linenos">24</span></a> <span class="s2">"="</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="PRQL.Tokenizer-25"><a href="#PRQL.Tokenizer-25"><span class="linenos">25</span></a> <span class="s2">"'"</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Tokenizer-26"><a href="#PRQL.Tokenizer-26"><span class="linenos">26</span></a> <span class="s1">'"'</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">QUOTE</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Tokenizer-27"><a href="#PRQL.Tokenizer-27"><span class="linenos">27</span></a> <span class="s2">"`"</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="PRQL.Tokenizer-28"><a href="#PRQL.Tokenizer-28"><span class="linenos">28</span></a> <span class="s2">"#"</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="PRQL.Tokenizer-29"><a href="#PRQL.Tokenizer-29"><span class="linenos">29</span></a> <span class="p">}</span>
|
||||
</span><span id="PRQL.Tokenizer-30"><a href="#PRQL.Tokenizer-30"><span class="linenos">30</span></a>
|
||||
</span><span id="PRQL.Tokenizer-31"><a href="#PRQL.Tokenizer-31"><span class="linenos">31</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL.Tokenizer-32"><a href="#PRQL.Tokenizer-32"><span class="linenos">32</span></a> <span class="o">**</span><span class="n">tokens</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">KEYWORDS</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Tokenizer-33"><a href="#PRQL.Tokenizer-33"><span class="linenos">33</span></a> <span class="p">}</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -791,85 +894,123 @@
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#PRQL.Parser"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="PRQL.Parser-29"><a href="#PRQL.Parser-29"><span class="linenos"> 29</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
|
||||
</span><span id="PRQL.Parser-30"><a href="#PRQL.Parser-30"><span class="linenos"> 30</span></a> <span class="n">TRANSFORM_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL.Parser-31"><a href="#PRQL.Parser-31"><span class="linenos"> 31</span></a> <span class="s2">"DERIVE"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_selection</span><span class="p">(</span><span class="n">query</span><span class="p">),</span>
|
||||
</span><span id="PRQL.Parser-32"><a href="#PRQL.Parser-32"><span class="linenos"> 32</span></a> <span class="s2">"SELECT"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_selection</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
|
||||
</span><span id="PRQL.Parser-33"><a href="#PRQL.Parser-33"><span class="linenos"> 33</span></a> <span class="p">}</span>
|
||||
</span><span id="PRQL.Parser-34"><a href="#PRQL.Parser-34"><span class="linenos"> 34</span></a>
|
||||
</span><span id="PRQL.Parser-35"><a href="#PRQL.Parser-35"><span class="linenos"> 35</span></a> <span class="k">def</span> <span class="nf">_parse_statement</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
|
||||
</span><span id="PRQL.Parser-36"><a href="#PRQL.Parser-36"><span class="linenos"> 36</span></a> <span class="n">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="PRQL.Parser-37"><a href="#PRQL.Parser-37"><span class="linenos"> 37</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query</span><span class="p">()</span>
|
||||
</span><span id="PRQL.Parser-38"><a href="#PRQL.Parser-38"><span class="linenos"> 38</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="PRQL.Parser-39"><a href="#PRQL.Parser-39"><span class="linenos"> 39</span></a>
|
||||
</span><span id="PRQL.Parser-40"><a href="#PRQL.Parser-40"><span class="linenos"> 40</span></a> <span class="k">def</span> <span class="nf">_parse_query</span><span class="p">(</span>
|
||||
</span><span id="PRQL.Parser-41"><a href="#PRQL.Parser-41"><span class="linenos"> 41</span></a> <span class="bp">self</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Parser-42"><a href="#PRQL.Parser-42"><span class="linenos"> 42</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">]:</span>
|
||||
</span><span id="PRQL.Parser-43"><a href="#PRQL.Parser-43"><span class="linenos"> 43</span></a> <span class="n">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">()</span>
|
||||
</span><span id="PRQL.Parser-44"><a href="#PRQL.Parser-44"><span class="linenos"> 44</span></a>
|
||||
</span><span id="PRQL.Parser-45"><a href="#PRQL.Parser-45"><span class="linenos"> 45</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">from_</span><span class="p">:</span>
|
||||
</span><span id="PRQL.Parser-46"><a href="#PRQL.Parser-46"><span class="linenos"> 46</span></a> <span class="k">return</span> <span class="kc">None</span>
|
||||
</span><span id="PRQL.Parser-47"><a href="#PRQL.Parser-47"><span class="linenos"> 47</span></a>
|
||||
</span><span id="PRQL.Parser-48"><a href="#PRQL.Parser-48"><span class="linenos"> 48</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">from_</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-49"><a href="#PRQL.Parser-49"><span class="linenos"> 49</span></a>
|
||||
</span><span id="PRQL.Parser-50"><a href="#PRQL.Parser-50"><span class="linenos"> 50</span></a> <span class="k">while</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">TRANSFORM_PARSERS</span><span class="p">):</span>
|
||||
</span><span id="PRQL.Parser-51"><a href="#PRQL.Parser-51"><span class="linenos"> 51</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORM_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 class="n">query</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-52"><a href="#PRQL.Parser-52"><span class="linenos"> 52</span></a>
|
||||
</span><span id="PRQL.Parser-53"><a href="#PRQL.Parser-53"><span class="linenos"> 53</span></a> <span class="k">return</span> <span class="n">query</span>
|
||||
</span><span id="PRQL.Parser-54"><a href="#PRQL.Parser-54"><span class="linenos"> 54</span></a>
|
||||
</span><span id="PRQL.Parser-55"><a href="#PRQL.Parser-55"><span class="linenos"> 55</span></a> <span class="k">def</span> <span class="nf">_parse_selection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">,</span> <span class="n">append</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">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">:</span>
|
||||
</span><span id="PRQL.Parser-56"><a href="#PRQL.Parser-56"><span class="linenos"> 56</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_BRACE</span><span class="p">):</span>
|
||||
</span><span id="PRQL.Parser-57"><a href="#PRQL.Parser-57"><span class="linenos"> 57</span></a> <span class="n">selects</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_expression</span><span class="p">)</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="PRQL.Parser-35"><a href="#PRQL.Parser-35"><span class="linenos"> 35</span></a> <span class="k">class</span> <span class="nc">Parser</span><span class="p">(</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="p">):</span>
|
||||
</span><span id="PRQL.Parser-36"><a href="#PRQL.Parser-36"><span class="linenos"> 36</span></a> <span class="n">CONJUNCTION</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL.Parser-37"><a href="#PRQL.Parser-37"><span class="linenos"> 37</span></a> <span class="o">**</span><span class="n">parser</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">CONJUNCTION</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Parser-38"><a href="#PRQL.Parser-38"><span class="linenos"> 38</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DAMP</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">And</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Parser-39"><a href="#PRQL.Parser-39"><span class="linenos"> 39</span></a> <span class="n">TokenType</span><span class="o">.</span><span class="n">DPIPE</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Or</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Parser-40"><a href="#PRQL.Parser-40"><span class="linenos"> 40</span></a> <span class="p">}</span>
|
||||
</span><span id="PRQL.Parser-41"><a href="#PRQL.Parser-41"><span class="linenos"> 41</span></a>
|
||||
</span><span id="PRQL.Parser-42"><a href="#PRQL.Parser-42"><span class="linenos"> 42</span></a> <span class="n">TRANSFORM_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL.Parser-43"><a href="#PRQL.Parser-43"><span class="linenos"> 43</span></a> <span class="s2">"DERIVE"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_selection</span><span class="p">(</span><span class="n">query</span><span class="p">),</span>
|
||||
</span><span id="PRQL.Parser-44"><a href="#PRQL.Parser-44"><span class="linenos"> 44</span></a> <span class="s2">"SELECT"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_selection</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="kc">False</span><span class="p">),</span>
|
||||
</span><span id="PRQL.Parser-45"><a href="#PRQL.Parser-45"><span class="linenos"> 45</span></a> <span class="s2">"TAKE"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_take</span><span class="p">(</span><span class="n">query</span><span class="p">),</span>
|
||||
</span><span id="PRQL.Parser-46"><a href="#PRQL.Parser-46"><span class="linenos"> 46</span></a> <span class="s2">"FILTER"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">query</span><span class="o">.</span><span class="n">where</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="PRQL.Parser-47"><a href="#PRQL.Parser-47"><span class="linenos"> 47</span></a> <span class="s2">"APPEND"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">query</span><span class="o">.</span><span class="n">union</span><span class="p">(</span>
|
||||
</span><span id="PRQL.Parser-48"><a href="#PRQL.Parser-48"><span class="linenos"> 48</span></a> <span class="n">_select_all</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">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
|
||||
</span><span id="PRQL.Parser-49"><a href="#PRQL.Parser-49"><span class="linenos"> 49</span></a> <span class="p">),</span>
|
||||
</span><span id="PRQL.Parser-50"><a href="#PRQL.Parser-50"><span class="linenos"> 50</span></a> <span class="s2">"REMOVE"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">query</span><span class="o">.</span><span class="n">except_</span><span class="p">(</span>
|
||||
</span><span id="PRQL.Parser-51"><a href="#PRQL.Parser-51"><span class="linenos"> 51</span></a> <span class="n">_select_all</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">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
|
||||
</span><span id="PRQL.Parser-52"><a href="#PRQL.Parser-52"><span class="linenos"> 52</span></a> <span class="p">),</span>
|
||||
</span><span id="PRQL.Parser-53"><a href="#PRQL.Parser-53"><span class="linenos"> 53</span></a> <span class="s2">"INTERSECT"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">query</span><span class="o">.</span><span class="n">intersect</span><span class="p">(</span>
|
||||
</span><span id="PRQL.Parser-54"><a href="#PRQL.Parser-54"><span class="linenos"> 54</span></a> <span class="n">_select_all</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">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span>
|
||||
</span><span id="PRQL.Parser-55"><a href="#PRQL.Parser-55"><span class="linenos"> 55</span></a> <span class="p">),</span>
|
||||
</span><span id="PRQL.Parser-56"><a href="#PRQL.Parser-56"><span class="linenos"> 56</span></a> <span class="s2">"SORT"</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_order_by</span><span class="p">(</span><span class="n">query</span><span class="p">),</span>
|
||||
</span><span id="PRQL.Parser-57"><a href="#PRQL.Parser-57"><span class="linenos"> 57</span></a> <span class="p">}</span>
|
||||
</span><span id="PRQL.Parser-58"><a href="#PRQL.Parser-58"><span class="linenos"> 58</span></a>
|
||||
</span><span id="PRQL.Parser-59"><a href="#PRQL.Parser-59"><span class="linenos"> 59</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_BRACE</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">query</span><span class="p">):</span>
|
||||
</span><span id="PRQL.Parser-60"><a href="#PRQL.Parser-60"><span class="linenos"> 60</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">"Expecting ]"</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-61"><a href="#PRQL.Parser-61"><span class="linenos"> 61</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="PRQL.Parser-62"><a href="#PRQL.Parser-62"><span class="linenos"> 62</span></a> <span class="n">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="PRQL.Parser-63"><a href="#PRQL.Parser-63"><span class="linenos"> 63</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[</span><span class="n">expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="p">[]</span>
|
||||
</span><span id="PRQL.Parser-64"><a href="#PRQL.Parser-64"><span class="linenos"> 64</span></a>
|
||||
</span><span id="PRQL.Parser-65"><a href="#PRQL.Parser-65"><span class="linenos"> 65</span></a> <span class="n">projections</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL.Parser-66"><a href="#PRQL.Parser-66"><span class="linenos"> 66</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</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="k">else</span> <span class="n">select</span>
|
||||
</span><span id="PRQL.Parser-67"><a href="#PRQL.Parser-67"><span class="linenos"> 67</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">selects</span>
|
||||
</span><span id="PRQL.Parser-68"><a href="#PRQL.Parser-68"><span class="linenos"> 68</span></a> <span class="p">}</span>
|
||||
</span><span id="PRQL.Parser-59"><a href="#PRQL.Parser-59"><span class="linenos"> 59</span></a> <span class="k">def</span> <span class="nf">_parse_statement</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
|
||||
</span><span id="PRQL.Parser-60"><a href="#PRQL.Parser-60"><span class="linenos"> 60</span></a> <span class="n">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="PRQL.Parser-61"><a href="#PRQL.Parser-61"><span class="linenos"> 61</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_query</span><span class="p">()</span>
|
||||
</span><span id="PRQL.Parser-62"><a href="#PRQL.Parser-62"><span class="linenos"> 62</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="PRQL.Parser-63"><a href="#PRQL.Parser-63"><span class="linenos"> 63</span></a>
|
||||
</span><span id="PRQL.Parser-64"><a href="#PRQL.Parser-64"><span class="linenos"> 64</span></a> <span class="k">def</span> <span class="nf">_parse_query</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">]:</span>
|
||||
</span><span id="PRQL.Parser-65"><a href="#PRQL.Parser-65"><span class="linenos"> 65</span></a> <span class="n">from_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_from</span><span class="p">()</span>
|
||||
</span><span id="PRQL.Parser-66"><a href="#PRQL.Parser-66"><span class="linenos"> 66</span></a>
|
||||
</span><span id="PRQL.Parser-67"><a href="#PRQL.Parser-67"><span class="linenos"> 67</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">from_</span><span class="p">:</span>
|
||||
</span><span id="PRQL.Parser-68"><a href="#PRQL.Parser-68"><span class="linenos"> 68</span></a> <span class="k">return</span> <span class="kc">None</span>
|
||||
</span><span id="PRQL.Parser-69"><a href="#PRQL.Parser-69"><span class="linenos"> 69</span></a>
|
||||
</span><span id="PRQL.Parser-70"><a href="#PRQL.Parser-70"><span class="linenos"> 70</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[</span>
|
||||
</span><span id="PRQL.Parser-71"><a href="#PRQL.Parser-71"><span class="linenos"> 71</span></a> <span class="n">select</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
||||
</span><span id="PRQL.Parser-72"><a href="#PRQL.Parser-72"><span class="linenos"> 72</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span> <span class="p">(</span><span class="n">projections</span><span class="p">[</span><span class="n">s</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">projections</span> <span class="k">else</span> <span class="n">s</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-73"><a href="#PRQL.Parser-73"><span class="linenos"> 73</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">s</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="PRQL.Parser-74"><a href="#PRQL.Parser-74"><span class="linenos"> 74</span></a> <span class="k">else</span> <span class="n">s</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Parser-75"><a href="#PRQL.Parser-75"><span class="linenos"> 75</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Parser-76"><a href="#PRQL.Parser-76"><span class="linenos"> 76</span></a> <span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-77"><a href="#PRQL.Parser-77"><span class="linenos"> 77</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span>
|
||||
</span><span id="PRQL.Parser-78"><a href="#PRQL.Parser-78"><span class="linenos"> 78</span></a> <span class="p">]</span>
|
||||
</span><span id="PRQL.Parser-79"><a href="#PRQL.Parser-79"><span class="linenos"> 79</span></a>
|
||||
</span><span id="PRQL.Parser-80"><a href="#PRQL.Parser-80"><span class="linenos"> 80</span></a> <span class="k">return</span> <span class="n">query</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">selects</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-81"><a href="#PRQL.Parser-81"><span class="linenos"> 81</span></a>
|
||||
</span><span id="PRQL.Parser-82"><a href="#PRQL.Parser-82"><span class="linenos"> 82</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">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
|
||||
</span><span id="PRQL.Parser-83"><a href="#PRQL.Parser-83"><span class="linenos"> 83</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</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">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">:</span>
|
||||
</span><span id="PRQL.Parser-84"><a href="#PRQL.Parser-84"><span class="linenos"> 84</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="kc">True</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-85"><a href="#PRQL.Parser-85"><span class="linenos"> 85</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="PRQL.Parser-86"><a href="#PRQL.Parser-86"><span class="linenos"> 86</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">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 class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-87"><a href="#PRQL.Parser-87"><span class="linenos"> 87</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
|
||||
</span><span id="PRQL.Parser-88"><a href="#PRQL.Parser-88"><span class="linenos"> 88</span></a>
|
||||
</span><span id="PRQL.Parser-89"><a href="#PRQL.Parser-89"><span class="linenos"> 89</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
|
||||
</span><span id="PRQL.Parser-90"><a href="#PRQL.Parser-90"><span class="linenos"> 90</span></a> <span class="bp">self</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Parser-91"><a href="#PRQL.Parser-91"><span class="linenos"> 91</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="PRQL.Parser-92"><a href="#PRQL.Parser-92"><span class="linenos"> 92</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="PRQL.Parser-93"><a href="#PRQL.Parser-93"><span class="linenos"> 93</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="PRQL.Parser-94"><a href="#PRQL.Parser-94"><span class="linenos"> 94</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="PRQL.Parser-95"><a href="#PRQL.Parser-95"><span class="linenos"> 95</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="PRQL.Parser-96"><a href="#PRQL.Parser-96"><span class="linenos"> 96</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
|
||||
</span><span id="PRQL.Parser-97"><a href="#PRQL.Parser-97"><span class="linenos"> 97</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">()</span>
|
||||
</span><span id="PRQL.Parser-98"><a href="#PRQL.Parser-98"><span class="linenos"> 98</span></a>
|
||||
</span><span id="PRQL.Parser-99"><a href="#PRQL.Parser-99"><span class="linenos"> 99</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
|
||||
</span><span id="PRQL.Parser-100"><a href="#PRQL.Parser-100"><span class="linenos">100</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="PRQL.Parser-101"><a href="#PRQL.Parser-101"><span class="linenos">101</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span 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="PRQL.Parser-102"><a href="#PRQL.Parser-102"><span class="linenos">102</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="PRQL.Parser-103"><a href="#PRQL.Parser-103"><span class="linenos">103</span></a> <span class="k">return</span> <span class="kc">None</span>
|
||||
</span><span id="PRQL.Parser-104"><a href="#PRQL.Parser-104"><span class="linenos">104</span></a>
|
||||
</span><span id="PRQL.Parser-105"><a href="#PRQL.Parser-105"><span class="linenos">105</span></a> <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="PRQL.Parser-106"><a href="#PRQL.Parser-106"><span class="linenos">106</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="PRQL.Parser-107"><a href="#PRQL.Parser-107"><span class="linenos">107</span></a> <span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-70"><a href="#PRQL.Parser-70"><span class="linenos"> 70</span></a> <span class="n">query</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)</span><span class="o">.</span><span class="n">from_</span><span class="p">(</span><span class="n">from_</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-71"><a href="#PRQL.Parser-71"><span class="linenos"> 71</span></a>
|
||||
</span><span id="PRQL.Parser-72"><a href="#PRQL.Parser-72"><span class="linenos"> 72</span></a> <span class="k">while</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">TRANSFORM_PARSERS</span><span class="p">):</span>
|
||||
</span><span id="PRQL.Parser-73"><a href="#PRQL.Parser-73"><span class="linenos"> 73</span></a> <span class="n">query</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">TRANSFORM_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 class="n">query</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-74"><a href="#PRQL.Parser-74"><span class="linenos"> 74</span></a>
|
||||
</span><span id="PRQL.Parser-75"><a href="#PRQL.Parser-75"><span class="linenos"> 75</span></a> <span class="k">return</span> <span class="n">query</span>
|
||||
</span><span id="PRQL.Parser-76"><a href="#PRQL.Parser-76"><span class="linenos"> 76</span></a>
|
||||
</span><span id="PRQL.Parser-77"><a href="#PRQL.Parser-77"><span class="linenos"> 77</span></a> <span class="k">def</span> <span class="nf">_parse_selection</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">,</span> <span class="n">append</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">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">:</span>
|
||||
</span><span id="PRQL.Parser-78"><a href="#PRQL.Parser-78"><span class="linenos"> 78</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_BRACE</span><span class="p">):</span>
|
||||
</span><span id="PRQL.Parser-79"><a href="#PRQL.Parser-79"><span class="linenos"> 79</span></a> <span class="n">selects</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_expression</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-80"><a href="#PRQL.Parser-80"><span class="linenos"> 80</span></a>
|
||||
</span><span id="PRQL.Parser-81"><a href="#PRQL.Parser-81"><span class="linenos"> 81</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_BRACE</span><span class="p">,</span> <span class="n">expression</span><span class="o">=</span><span class="n">query</span><span class="p">):</span>
|
||||
</span><span id="PRQL.Parser-82"><a href="#PRQL.Parser-82"><span class="linenos"> 82</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">"Expecting }"</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-83"><a href="#PRQL.Parser-83"><span class="linenos"> 83</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="PRQL.Parser-84"><a href="#PRQL.Parser-84"><span class="linenos"> 84</span></a> <span class="n">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="PRQL.Parser-85"><a href="#PRQL.Parser-85"><span class="linenos"> 85</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[</span><span class="n">expression</span><span class="p">]</span> <span class="k">if</span> <span class="n">expression</span> <span class="k">else</span> <span class="p">[]</span>
|
||||
</span><span id="PRQL.Parser-86"><a href="#PRQL.Parser-86"><span class="linenos"> 86</span></a>
|
||||
</span><span id="PRQL.Parser-87"><a href="#PRQL.Parser-87"><span class="linenos"> 87</span></a> <span class="n">projections</span> <span class="o">=</span> <span class="p">{</span>
|
||||
</span><span id="PRQL.Parser-88"><a href="#PRQL.Parser-88"><span class="linenos"> 88</span></a> <span class="n">select</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">:</span> <span class="n">select</span><span class="o">.</span><span class="n">this</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">select</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="k">else</span> <span class="n">select</span>
|
||||
</span><span id="PRQL.Parser-89"><a href="#PRQL.Parser-89"><span class="linenos"> 89</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">selects</span>
|
||||
</span><span id="PRQL.Parser-90"><a href="#PRQL.Parser-90"><span class="linenos"> 90</span></a> <span class="p">}</span>
|
||||
</span><span id="PRQL.Parser-91"><a href="#PRQL.Parser-91"><span class="linenos"> 91</span></a>
|
||||
</span><span id="PRQL.Parser-92"><a href="#PRQL.Parser-92"><span class="linenos"> 92</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[</span>
|
||||
</span><span id="PRQL.Parser-93"><a href="#PRQL.Parser-93"><span class="linenos"> 93</span></a> <span class="n">select</span><span class="o">.</span><span class="n">transform</span><span class="p">(</span>
|
||||
</span><span id="PRQL.Parser-94"><a href="#PRQL.Parser-94"><span class="linenos"> 94</span></a> <span class="k">lambda</span> <span class="n">s</span><span class="p">:</span> <span class="p">(</span><span class="n">projections</span><span class="p">[</span><span class="n">s</span><span class="o">.</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">name</span> <span class="ow">in</span> <span class="n">projections</span> <span class="k">else</span> <span class="n">s</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-95"><a href="#PRQL.Parser-95"><span class="linenos"> 95</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">s</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="PRQL.Parser-96"><a href="#PRQL.Parser-96"><span class="linenos"> 96</span></a> <span class="k">else</span> <span class="n">s</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Parser-97"><a href="#PRQL.Parser-97"><span class="linenos"> 97</span></a> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Parser-98"><a href="#PRQL.Parser-98"><span class="linenos"> 98</span></a> <span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-99"><a href="#PRQL.Parser-99"><span class="linenos"> 99</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span>
|
||||
</span><span id="PRQL.Parser-100"><a href="#PRQL.Parser-100"><span class="linenos">100</span></a> <span class="p">]</span>
|
||||
</span><span id="PRQL.Parser-101"><a href="#PRQL.Parser-101"><span class="linenos">101</span></a>
|
||||
</span><span id="PRQL.Parser-102"><a href="#PRQL.Parser-102"><span class="linenos">102</span></a> <span class="k">return</span> <span class="n">query</span><span class="o">.</span><span class="n">select</span><span class="p">(</span><span class="o">*</span><span class="n">selects</span><span class="p">,</span> <span class="n">append</span><span class="o">=</span><span class="n">append</span><span class="p">,</span> <span class="n">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-103"><a href="#PRQL.Parser-103"><span class="linenos">103</span></a>
|
||||
</span><span id="PRQL.Parser-104"><a href="#PRQL.Parser-104"><span class="linenos">104</span></a> <span class="k">def</span> <span class="nf">_parse_take</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">]:</span>
|
||||
</span><span id="PRQL.Parser-105"><a href="#PRQL.Parser-105"><span class="linenos">105</span></a> <span class="n">num</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 class="c1"># TODO: TAKE for ranges a..b</span>
|
||||
</span><span id="PRQL.Parser-106"><a href="#PRQL.Parser-106"><span class="linenos">106</span></a> <span class="k">return</span> <span class="n">query</span><span class="o">.</span><span class="n">limit</span><span class="p">(</span><span class="n">num</span><span class="p">)</span> <span class="k">if</span> <span class="n">num</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
</span><span id="PRQL.Parser-107"><a href="#PRQL.Parser-107"><span class="linenos">107</span></a>
|
||||
</span><span id="PRQL.Parser-108"><a href="#PRQL.Parser-108"><span class="linenos">108</span></a> <span class="k">def</span> <span class="nf">_parse_ordered</span><span class="p">(</span>
|
||||
</span><span id="PRQL.Parser-109"><a href="#PRQL.Parser-109"><span class="linenos">109</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">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><span id="PRQL.Parser-110"><a href="#PRQL.Parser-110"><span class="linenos">110</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Ordered</span><span class="p">]:</span>
|
||||
</span><span id="PRQL.Parser-111"><a href="#PRQL.Parser-111"><span class="linenos">111</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">PLUS</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-112"><a href="#PRQL.Parser-112"><span class="linenos">112</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">DASH</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="PRQL.Parser-113"><a href="#PRQL.Parser-113"><span class="linenos">113</span></a> <span class="n">term</span> <span class="o">=</span> <span class="n">term</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_ordered</span><span class="p">(</span><span class="n">parse_method</span><span class="o">=</span><span class="n">parse_method</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-114"><a href="#PRQL.Parser-114"><span class="linenos">114</span></a> <span class="k">if</span> <span class="n">term</span> <span class="ow">and</span> <span class="n">desc</span><span class="p">:</span>
|
||||
</span><span id="PRQL.Parser-115"><a href="#PRQL.Parser-115"><span class="linenos">115</span></a> <span class="n">term</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"desc"</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-116"><a href="#PRQL.Parser-116"><span class="linenos">116</span></a> <span class="n">term</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"nulls_first"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-117"><a href="#PRQL.Parser-117"><span class="linenos">117</span></a> <span class="k">return</span> <span class="n">term</span>
|
||||
</span><span id="PRQL.Parser-118"><a href="#PRQL.Parser-118"><span class="linenos">118</span></a>
|
||||
</span><span id="PRQL.Parser-119"><a href="#PRQL.Parser-119"><span class="linenos">119</span></a> <span class="k">def</span> <span class="nf">_parse_order_by</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">]:</span>
|
||||
</span><span id="PRQL.Parser-120"><a href="#PRQL.Parser-120"><span class="linenos">120</span></a> <span class="n">l_brace</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_BRACE</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-121"><a href="#PRQL.Parser-121"><span class="linenos">121</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="PRQL.Parser-122"><a href="#PRQL.Parser-122"><span class="linenos">122</span></a> <span class="k">if</span> <span class="n">l_brace</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">R_BRACE</span><span class="p">):</span>
|
||||
</span><span id="PRQL.Parser-123"><a href="#PRQL.Parser-123"><span class="linenos">123</span></a> <span class="bp">self</span><span class="o">.</span><span class="n">raise_error</span><span class="p">(</span><span class="s2">"Expecting }"</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-124"><a href="#PRQL.Parser-124"><span class="linenos">124</span></a> <span class="k">return</span> <span class="n">query</span><span class="o">.</span><span class="n">order_by</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">Order</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">copy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-125"><a href="#PRQL.Parser-125"><span class="linenos">125</span></a>
|
||||
</span><span id="PRQL.Parser-126"><a href="#PRQL.Parser-126"><span class="linenos">126</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">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
|
||||
</span><span id="PRQL.Parser-127"><a href="#PRQL.Parser-127"><span class="linenos">127</span></a> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_next</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">TokenType</span><span class="o">.</span><span class="n">ALIAS</span><span class="p">:</span>
|
||||
</span><span id="PRQL.Parser-128"><a href="#PRQL.Parser-128"><span class="linenos">128</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="kc">True</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-129"><a href="#PRQL.Parser-129"><span class="linenos">129</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="PRQL.Parser-130"><a href="#PRQL.Parser-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="bp">self</span><span 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">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 class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
|
||||
</span><span id="PRQL.Parser-131"><a href="#PRQL.Parser-131"><span class="linenos">131</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_conjunction</span><span class="p">()</span>
|
||||
</span><span id="PRQL.Parser-132"><a href="#PRQL.Parser-132"><span class="linenos">132</span></a>
|
||||
</span><span id="PRQL.Parser-133"><a href="#PRQL.Parser-133"><span class="linenos">133</span></a> <span class="k">def</span> <span class="nf">_parse_table</span><span class="p">(</span>
|
||||
</span><span id="PRQL.Parser-134"><a href="#PRQL.Parser-134"><span class="linenos">134</span></a> <span class="bp">self</span><span class="p">,</span>
|
||||
</span><span id="PRQL.Parser-135"><a href="#PRQL.Parser-135"><span class="linenos">135</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="PRQL.Parser-136"><a href="#PRQL.Parser-136"><span class="linenos">136</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="PRQL.Parser-137"><a href="#PRQL.Parser-137"><span class="linenos">137</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="PRQL.Parser-138"><a href="#PRQL.Parser-138"><span class="linenos">138</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="PRQL.Parser-139"><a href="#PRQL.Parser-139"><span class="linenos">139</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="PRQL.Parser-140"><a href="#PRQL.Parser-140"><span class="linenos">140</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
|
||||
</span><span id="PRQL.Parser-141"><a href="#PRQL.Parser-141"><span class="linenos">141</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_table_parts</span><span class="p">()</span>
|
||||
</span><span id="PRQL.Parser-142"><a href="#PRQL.Parser-142"><span class="linenos">142</span></a>
|
||||
</span><span id="PRQL.Parser-143"><a href="#PRQL.Parser-143"><span class="linenos">143</span></a> <span class="k">def</span> <span class="nf">_parse_from</span><span class="p">(</span>
|
||||
</span><span id="PRQL.Parser-144"><a href="#PRQL.Parser-144"><span class="linenos">144</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="PRQL.Parser-145"><a href="#PRQL.Parser-145"><span class="linenos">145</span></a> <span class="p">)</span> <span class="o">-></span> <span class="n">t</span><span 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="PRQL.Parser-146"><a href="#PRQL.Parser-146"><span class="linenos">146</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="PRQL.Parser-147"><a href="#PRQL.Parser-147"><span class="linenos">147</span></a> <span class="k">return</span> <span class="kc">None</span>
|
||||
</span><span id="PRQL.Parser-148"><a href="#PRQL.Parser-148"><span class="linenos">148</span></a>
|
||||
</span><span id="PRQL.Parser-149"><a href="#PRQL.Parser-149"><span class="linenos">149</span></a> <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="PRQL.Parser-150"><a href="#PRQL.Parser-150"><span class="linenos">150</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="PRQL.Parser-151"><a href="#PRQL.Parser-151"><span class="linenos">151</span></a> <span class="p">)</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -890,10 +1031,24 @@ Default: 3</li>
|
|||
</div>
|
||||
|
||||
|
||||
<div id="PRQL.Parser.CONJUNCTION" class="classattr">
|
||||
<div class="attr variable">
|
||||
<span class="name">CONJUNCTION</span> =
|
||||
<input id="PRQL.Parser.CONJUNCTION-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="PRQL.Parser.CONJUNCTION-view-value"></label><span class="default_value">{<TokenType.AND: 'AND'>: <class '<a href="../expressions.html#And">sqlglot.expressions.And</a>'>, <TokenType.OR: 'OR'>: <class '<a href="../expressions.html#Or">sqlglot.expressions.Or</a>'>, <TokenType.DAMP: 'DAMP'>: <class '<a href="../expressions.html#And">sqlglot.expressions.And</a>'>, <TokenType.DPIPE: 'DPIPE'>: <class '<a href="../expressions.html#Or">sqlglot.expressions.Or</a>'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
<a class="headerlink" href="#PRQL.Parser.CONJUNCTION"></a>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div id="PRQL.Parser.TRANSFORM_PARSERS" class="classattr">
|
||||
<div class="attr variable">
|
||||
<span class="name">TRANSFORM_PARSERS</span> =
|
||||
<span class="default_value">{'DERIVE': <function <a href="#PRQL.Parser">PRQL.Parser</a>.<lambda>>, 'SELECT': <function <a href="#PRQL.Parser">PRQL.Parser</a>.<lambda>>}</span>
|
||||
<input id="PRQL.Parser.TRANSFORM_PARSERS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="PRQL.Parser.TRANSFORM_PARSERS-view-value"></label><span class="default_value">{'DERIVE': <function <a href="#PRQL.Parser">PRQL.Parser</a>.<lambda>>, 'SELECT': <function <a href="#PRQL.Parser">PRQL.Parser</a>.<lambda>>, 'TAKE': <function <a href="#PRQL.Parser">PRQL.Parser</a>.<lambda>>, 'FILTER': <function <a href="#PRQL.Parser">PRQL.Parser</a>.<lambda>>, 'APPEND': <function <a href="#PRQL.Parser">PRQL.Parser</a>.<lambda>>, 'REMOVE': <function <a href="#PRQL.Parser">PRQL.Parser</a>.<lambda>>, 'INTERSECT': <function <a href="#PRQL.Parser">PRQL.Parser</a>.<lambda>>, 'SORT': <function <a href="#PRQL.Parser">PRQL.Parser</a>.<lambda>>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -951,7 +1106,6 @@ Default: 3</li>
|
|||
<dd id="PRQL.Parser.UPDATE_ALIAS_TOKENS" class="variable"><a href="../parser.html#Parser.UPDATE_ALIAS_TOKENS">UPDATE_ALIAS_TOKENS</a></dd>
|
||||
<dd id="PRQL.Parser.TRIM_TYPES" class="variable"><a href="../parser.html#Parser.TRIM_TYPES">TRIM_TYPES</a></dd>
|
||||
<dd id="PRQL.Parser.FUNC_TOKENS" class="variable"><a href="../parser.html#Parser.FUNC_TOKENS">FUNC_TOKENS</a></dd>
|
||||
<dd id="PRQL.Parser.CONJUNCTION" class="variable"><a href="../parser.html#Parser.CONJUNCTION">CONJUNCTION</a></dd>
|
||||
<dd id="PRQL.Parser.EQUALITY" class="variable"><a href="../parser.html#Parser.EQUALITY">EQUALITY</a></dd>
|
||||
<dd id="PRQL.Parser.COMPARISON" class="variable"><a href="../parser.html#Parser.COMPARISON">COMPARISON</a></dd>
|
||||
<dd id="PRQL.Parser.BITWISE" class="variable"><a href="../parser.html#Parser.BITWISE">BITWISE</a></dd>
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Add table
Add a link
Reference in a new issue