1
0
Fork 0

Merging upstream version 15.2.0.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-02-13 15:58:40 +01:00
parent 2e6df1bcfa
commit 3d4adf9c16
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
81 changed files with 40321 additions and 37940 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -239,7 +239,7 @@ a parsed syntax tree.</p>
<ul>
<li><strong>error_level:</strong> the desired error level.
Default: ErrorLevel.RAISE</li>
Default: ErrorLevel.IMMEDIATE</li>
<li><strong>error_message_context:</strong> determines the amount of context to capture from a
query string when displaying the error message (in number of characters).
Default: 50.</li>
@ -336,6 +336,8 @@ represents a python time format and the output the target time format</li>
Default: "upper"</li>
<li><strong>alias_post_tablesample (bool):</strong> if the table alias comes after tablesample
Default: False</li>
<li><strong>identifiers_can_start_with_digit (bool):</strong> if an unquoted identifier can start with digit
Default: False</li>
<li><strong>unsupported_level (ErrorLevel):</strong> determines the generator's behavior when it encounters
unsupported expressions. Default ErrorLevel.WARN.</li>
<li><strong>null_ordering (str):</strong> Indicates the default null ordering method to use if not explicitly set.
@ -495,7 +497,6 @@ Default: True</li>
<dd id="Databricks.Generator.check_sql" class="function"><a href="../generator.html#Generator.check_sql">check_sql</a></dd>
<dd id="Databricks.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
<dd id="Databricks.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
<dd id="Databricks.Generator.unique_sql" class="function"><a href="../generator.html#Generator.unique_sql">unique_sql</a></dd>
<dd id="Databricks.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
<dd id="Databricks.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="Databricks.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
@ -587,6 +588,9 @@ Default: True</li>
<dd id="Databricks.Generator.when_sql" class="function"><a href="../generator.html#Generator.when_sql">when_sql</a></dd>
<dd id="Databricks.Generator.merge_sql" class="function"><a href="../generator.html#Generator.merge_sql">merge_sql</a></dd>
<dd id="Databricks.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
<dd id="Databricks.Generator.dictproperty_sql" class="function"><a href="../generator.html#Generator.dictproperty_sql">dictproperty_sql</a></dd>
<dd id="Databricks.Generator.dictrange_sql" class="function"><a href="../generator.html#Generator.dictrange_sql">dictrange_sql</a></dd>
<dd id="Databricks.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
</div>
<div><dt><a href="spark.html#Spark.Generator">sqlglot.dialects.spark.Spark.Generator</a></dt>

File diff suppressed because it is too large Load diff

View file

@ -460,7 +460,7 @@ a parsed syntax tree.</p>
<ul>
<li><strong>error_level:</strong> the desired error level.
Default: ErrorLevel.RAISE</li>
Default: ErrorLevel.IMMEDIATE</li>
<li><strong>error_message_context:</strong> determines the amount of context to capture from a
query string when displaying the error message (in number of characters).
Default: 50.</li>
@ -599,6 +599,8 @@ represents a python time format and the output the target time format</li>
Default: "upper"</li>
<li><strong>alias_post_tablesample (bool):</strong> if the table alias comes after tablesample
Default: False</li>
<li><strong>identifiers_can_start_with_digit (bool):</strong> if an unquoted identifier can start with digit
Default: False</li>
<li><strong>unsupported_level (ErrorLevel):</strong> determines the generator's behavior when it encounters
unsupported expressions. Default ErrorLevel.WARN.</li>
<li><strong>null_ordering (str):</strong> Indicates the default null ordering method to use if not explicitly set.
@ -780,7 +782,6 @@ Default: True</li>
<dd id="Drill.Generator.check_sql" class="function"><a href="../generator.html#Generator.check_sql">check_sql</a></dd>
<dd id="Drill.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
<dd id="Drill.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
<dd id="Drill.Generator.unique_sql" class="function"><a href="../generator.html#Generator.unique_sql">unique_sql</a></dd>
<dd id="Drill.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
<dd id="Drill.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="Drill.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
@ -873,6 +874,9 @@ Default: True</li>
<dd id="Drill.Generator.when_sql" class="function"><a href="../generator.html#Generator.when_sql">when_sql</a></dd>
<dd id="Drill.Generator.merge_sql" class="function"><a href="../generator.html#Generator.merge_sql">merge_sql</a></dd>
<dd id="Drill.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
<dd id="Drill.Generator.dictproperty_sql" class="function"><a href="../generator.html#Generator.dictproperty_sql">dictproperty_sql</a></dd>
<dd id="Drill.Generator.dictrange_sql" class="function"><a href="../generator.html#Generator.dictrange_sql">dictrange_sql</a></dd>
<dd id="Drill.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
</div>
</dl>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -522,7 +522,7 @@ a parsed syntax tree.</p>
<ul>
<li><strong>error_level:</strong> the desired error level.
Default: ErrorLevel.RAISE</li>
Default: ErrorLevel.IMMEDIATE</li>
<li><strong>error_message_context:</strong> determines the amount of context to capture from a
query string when displaying the error message (in number of characters).
Default: 50.</li>
@ -668,6 +668,8 @@ represents a python time format and the output the target time format</li>
Default: "upper"</li>
<li><strong>alias_post_tablesample (bool):</strong> if the table alias comes after tablesample
Default: False</li>
<li><strong>identifiers_can_start_with_digit (bool):</strong> if an unquoted identifier can start with digit
Default: False</li>
<li><strong>unsupported_level (ErrorLevel):</strong> determines the generator's behavior when it encounters
unsupported expressions. Default ErrorLevel.WARN.</li>
<li><strong>null_ordering (str):</strong> Indicates the default null ordering method to use if not explicitly set.
@ -895,7 +897,6 @@ Default: True</li>
<dd id="Oracle.Generator.check_sql" class="function"><a href="../generator.html#Generator.check_sql">check_sql</a></dd>
<dd id="Oracle.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
<dd id="Oracle.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
<dd id="Oracle.Generator.unique_sql" class="function"><a href="../generator.html#Generator.unique_sql">unique_sql</a></dd>
<dd id="Oracle.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
<dd id="Oracle.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="Oracle.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
@ -988,6 +989,9 @@ Default: True</li>
<dd id="Oracle.Generator.when_sql" class="function"><a href="../generator.html#Generator.when_sql">when_sql</a></dd>
<dd id="Oracle.Generator.merge_sql" class="function"><a href="../generator.html#Generator.merge_sql">merge_sql</a></dd>
<dd id="Oracle.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
<dd id="Oracle.Generator.dictproperty_sql" class="function"><a href="../generator.html#Generator.dictproperty_sql">dictproperty_sql</a></dd>
<dd id="Oracle.Generator.dictrange_sql" class="function"><a href="../generator.html#Generator.dictrange_sql">dictrange_sql</a></dd>
<dd id="Oracle.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
</div>
</dl>

View file

@ -183,7 +183,7 @@
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>
</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a><span class="k">def</span> <span class="nf">_datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">:</span> <span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">ARRAY</span><span class="p">:</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;array&quot;</span><span class="p">):</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="n">flat</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="si">}</span><span class="s2">[]&quot;</span>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>
@ -819,7 +819,7 @@ a parsed syntax tree.</p>
<ul>
<li><strong>error_level:</strong> the desired error level.
Default: ErrorLevel.RAISE</li>
Default: ErrorLevel.IMMEDIATE</li>
<li><strong>error_message_context:</strong> determines the amount of context to capture from a
query string when displaying the error message (in number of characters).
Default: 50.</li>
@ -967,6 +967,8 @@ represents a python time format and the output the target time format</li>
Default: "upper"</li>
<li><strong>alias_post_tablesample (bool):</strong> if the table alias comes after tablesample
Default: False</li>
<li><strong>identifiers_can_start_with_digit (bool):</strong> if an unquoted identifier can start with digit
Default: False</li>
<li><strong>unsupported_level (ErrorLevel):</strong> determines the generator's behavior when it encounters
unsupported expressions. Default ErrorLevel.WARN.</li>
<li><strong>null_ordering (str):</strong> Indicates the default null ordering method to use if not explicitly set.
@ -1130,7 +1132,6 @@ Default: True</li>
<dd id="Postgres.Generator.check_sql" class="function"><a href="../generator.html#Generator.check_sql">check_sql</a></dd>
<dd id="Postgres.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
<dd id="Postgres.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
<dd id="Postgres.Generator.unique_sql" class="function"><a href="../generator.html#Generator.unique_sql">unique_sql</a></dd>
<dd id="Postgres.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
<dd id="Postgres.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="Postgres.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
@ -1223,6 +1224,9 @@ Default: True</li>
<dd id="Postgres.Generator.when_sql" class="function"><a href="../generator.html#Generator.when_sql">when_sql</a></dd>
<dd id="Postgres.Generator.merge_sql" class="function"><a href="../generator.html#Generator.merge_sql">merge_sql</a></dd>
<dd id="Postgres.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
<dd id="Postgres.Generator.dictproperty_sql" class="function"><a href="../generator.html#Generator.dictproperty_sql">dictproperty_sql</a></dd>
<dd id="Postgres.Generator.dictrange_sql" class="function"><a href="../generator.html#Generator.dictrange_sql">dictrange_sql</a></dd>
<dd id="Postgres.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
</div>
</dl>

File diff suppressed because it is too large Load diff

View file

@ -126,135 +126,137 @@
</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="n">CONVERT_TYPE_FIRST</span> <span class="o">=</span> <span class="kc">True</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="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span 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-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="n">check_func</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="p">(</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="p">):</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;MAX&quot;</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">this</span>
</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a>
</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</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="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</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">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a> <span class="o">**</span><span class="n">Postgres</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-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="s2">&quot;SYSDATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">,</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;TIMETZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;UNLOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <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="c1"># Redshift allows # to appear as a table identifier prefix</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</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="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <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">PROPERTIES_LOCATION</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="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</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">TRANSFORMS</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="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;SYSDATE&quot;</span><span class="p">,</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="p">),</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</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 class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DISTKEY(</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</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">SortKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;COMPOUND &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;compound&#39;</span><span class="p">]</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">SORTKEY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</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-107"><a href="#L-107"><span class="linenos">107</span></a>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">)</span>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">)</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a>
</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>
</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a> <span class="o">**</span><span class="n">Postgres</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-63"><a href="#L-63"><span class="linenos"> 63</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;SYSDATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">,</span>
</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;TIMETZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a> <span class="s2">&quot;UNLOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a> <span class="p">}</span>
</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a>
</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a> <span class="c1"># Redshift allows # to appear as a table identifier prefix</span>
</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a>
</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</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="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a> <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="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a> <span class="p">}</span>
</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;SYSDATE&quot;</span><span class="p">,</span>
</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a> <span class="p">),</span>
</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a> <span class="p">),</span>
</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DISTKEY(</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_sql</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">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">]),</span>
</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;COMPOUND &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;compound&#39;</span><span class="p">]</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">SORTKEY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a> <span class="p">}</span>
</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a>
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">)</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">)</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="k">def</span> <span class="nf">values_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a><span class="sd"> Converts `VALUES...` expression into a series of unions.</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a><span class="sd"> Note: If you have a lot of unions then this will result in a large number of recursive statements to</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a><span class="sd"> evaluate the expression. You may need to increase `sys.setrecursionlimit` to run and it can also be</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a><span class="sd"> very slow.</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a><span class="sd"> &quot;&quot;&quot;</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="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">columns</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</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">values_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a><span class="sd"> Converts `VALUES...` expression into a series of unions.</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a><span class="sd"> Note: If you have a lot of unions then this will result in a large number of recursive statements to</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a><span class="sd"> evaluate the expression. You may need to increase `sys.setrecursionlimit` to run and it can also be</span>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a><span class="sd"> very slow.</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="n">tuple_exp</span><span class="o">.</span><span class="n">expressions</span> <span class="k">for</span> <span class="n">tuple_exp</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">rows</span><span class="p">):</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</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><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">columns</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="n">tuple_exp</span><span class="o">.</span><span class="n">expressions</span> <span class="k">for</span> <span class="n">tuple_exp</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">rows</span><span class="p">):</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="p">]</span>
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">subquery_expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selects</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="n">subquery_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">subquery_expression</span><span class="p">,</span> <span class="n">select</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">)</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">subquery_sql</span><span class="p">(</span><span class="n">subquery_expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">))</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">subquery_expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selects</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="n">subquery_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">subquery_expression</span><span class="p">,</span> <span class="n">select</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a>
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a>
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">subquery_expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">))</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a>
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a>
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@ -296,135 +298,137 @@
</span><span id="Redshift-39"><a href="#Redshift-39"><span class="linenos"> 39</span></a>
</span><span id="Redshift-40"><a href="#Redshift-40"><span class="linenos"> 40</span></a> <span class="n">CONVERT_TYPE_FIRST</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Redshift-41"><a href="#Redshift-41"><span class="linenos"> 41</span></a>
</span><span id="Redshift-42"><a href="#Redshift-42"><span class="linenos"> 42</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Redshift-43"><a href="#Redshift-43"><span class="linenos"> 43</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">)</span>
</span><span id="Redshift-44"><a href="#Redshift-44"><span class="linenos"> 44</span></a>
</span><span id="Redshift-45"><a href="#Redshift-45"><span class="linenos"> 45</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Redshift-46"><a href="#Redshift-46"><span class="linenos"> 46</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
</span><span id="Redshift-47"><a href="#Redshift-47"><span class="linenos"> 47</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span>
</span><span id="Redshift-48"><a href="#Redshift-48"><span class="linenos"> 48</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
</span><span id="Redshift-49"><a href="#Redshift-49"><span class="linenos"> 49</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
</span><span id="Redshift-50"><a href="#Redshift-50"><span class="linenos"> 50</span></a> <span class="p">):</span>
</span><span id="Redshift-51"><a href="#Redshift-51"><span class="linenos"> 51</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</span>
</span><span id="Redshift-52"><a href="#Redshift-52"><span class="linenos"> 52</span></a>
</span><span id="Redshift-53"><a href="#Redshift-53"><span class="linenos"> 53</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Redshift-42"><a href="#Redshift-42"><span class="linenos"> 42</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
</span><span id="Redshift-43"><a href="#Redshift-43"><span class="linenos"> 43</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Redshift-44"><a href="#Redshift-44"><span class="linenos"> 44</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Redshift-45"><a href="#Redshift-45"><span class="linenos"> 45</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
</span><span id="Redshift-46"><a href="#Redshift-46"><span class="linenos"> 46</span></a>
</span><span id="Redshift-47"><a href="#Redshift-47"><span class="linenos"> 47</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Redshift-48"><a href="#Redshift-48"><span class="linenos"> 48</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
</span><span id="Redshift-49"><a href="#Redshift-49"><span class="linenos"> 49</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
</span><span id="Redshift-50"><a href="#Redshift-50"><span class="linenos"> 50</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
</span><span id="Redshift-51"><a href="#Redshift-51"><span class="linenos"> 51</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
</span><span id="Redshift-52"><a href="#Redshift-52"><span class="linenos"> 52</span></a> <span class="p">):</span>
</span><span id="Redshift-53"><a href="#Redshift-53"><span class="linenos"> 53</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</span>
</span><span id="Redshift-54"><a href="#Redshift-54"><span class="linenos"> 54</span></a>
</span><span id="Redshift-55"><a href="#Redshift-55"><span class="linenos"> 55</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Redshift-56"><a href="#Redshift-56"><span class="linenos"> 56</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Redshift-57"><a href="#Redshift-57"><span class="linenos"> 57</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Redshift-58"><a href="#Redshift-58"><span class="linenos"> 58</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
</span><span id="Redshift-59"><a href="#Redshift-59"><span class="linenos"> 59</span></a>
</span><span id="Redshift-60"><a href="#Redshift-60"><span class="linenos"> 60</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift-61"><a href="#Redshift-61"><span class="linenos"> 61</span></a> <span class="o">**</span><span class="n">Postgres</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="Redshift-62"><a href="#Redshift-62"><span class="linenos"> 62</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
</span><span id="Redshift-63"><a href="#Redshift-63"><span class="linenos"> 63</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
</span><span id="Redshift-64"><a href="#Redshift-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;SYSDATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">,</span>
</span><span id="Redshift-65"><a href="#Redshift-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
</span><span id="Redshift-66"><a href="#Redshift-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;TIMETZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
</span><span id="Redshift-67"><a href="#Redshift-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
</span><span id="Redshift-68"><a href="#Redshift-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;UNLOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
</span><span id="Redshift-69"><a href="#Redshift-69"><span class="linenos"> 69</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
</span><span id="Redshift-70"><a href="#Redshift-70"><span class="linenos"> 70</span></a> <span class="p">}</span>
</span><span id="Redshift-71"><a href="#Redshift-71"><span class="linenos"> 71</span></a>
</span><span id="Redshift-72"><a href="#Redshift-72"><span class="linenos"> 72</span></a> <span class="c1"># Redshift allows # to appear as a table identifier prefix</span>
</span><span id="Redshift-73"><a href="#Redshift-73"><span class="linenos"> 73</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="Redshift-74"><a href="#Redshift-74"><span class="linenos"> 74</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
</span><span id="Redshift-75"><a href="#Redshift-75"><span class="linenos"> 75</span></a>
</span><span id="Redshift-76"><a href="#Redshift-76"><span class="linenos"> 76</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Redshift-77"><a href="#Redshift-77"><span class="linenos"> 77</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Redshift-78"><a href="#Redshift-78"><span class="linenos"> 78</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Redshift-79"><a href="#Redshift-79"><span class="linenos"> 79</span></a>
</span><span id="Redshift-80"><a href="#Redshift-80"><span class="linenos"> 80</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift-81"><a href="#Redshift-81"><span class="linenos"> 81</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
</span><span id="Redshift-82"><a href="#Redshift-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
</span><span id="Redshift-83"><a href="#Redshift-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
</span><span id="Redshift-84"><a href="#Redshift-84"><span class="linenos"> 84</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Redshift-85"><a href="#Redshift-85"><span class="linenos"> 85</span></a> <span class="p">}</span>
</span><span id="Redshift-86"><a href="#Redshift-86"><span class="linenos"> 86</span></a>
</span><span id="Redshift-87"><a href="#Redshift-87"><span class="linenos"> 87</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift-88"><a href="#Redshift-88"><span class="linenos"> 88</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
</span><span id="Redshift-89"><a href="#Redshift-89"><span class="linenos"> 89</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
</span><span id="Redshift-90"><a href="#Redshift-90"><span class="linenos"> 90</span></a> <span class="p">}</span>
</span><span id="Redshift-91"><a href="#Redshift-91"><span class="linenos"> 91</span></a>
</span><span id="Redshift-92"><a href="#Redshift-92"><span class="linenos"> 92</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift-93"><a href="#Redshift-93"><span class="linenos"> 93</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><span id="Redshift-94"><a href="#Redshift-94"><span class="linenos"> 94</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;SYSDATE&quot;</span><span class="p">,</span>
</span><span id="Redshift-95"><a href="#Redshift-95"><span class="linenos"> 95</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="Redshift-96"><a href="#Redshift-96"><span class="linenos"> 96</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="Redshift-97"><a href="#Redshift-97"><span class="linenos"> 97</span></a> <span class="p">),</span>
</span><span id="Redshift-98"><a href="#Redshift-98"><span class="linenos"> 98</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="Redshift-99"><a href="#Redshift-99"><span class="linenos"> 99</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="Redshift-100"><a href="#Redshift-100"><span class="linenos">100</span></a> <span class="p">),</span>
</span><span id="Redshift-101"><a href="#Redshift-101"><span class="linenos">101</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DISTKEY(</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Redshift-102"><a href="#Redshift-102"><span class="linenos">102</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Redshift-103"><a href="#Redshift-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
</span><span id="Redshift-104"><a href="#Redshift-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
</span><span id="Redshift-105"><a href="#Redshift-105"><span class="linenos">105</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">]),</span>
</span><span id="Redshift-106"><a href="#Redshift-106"><span class="linenos">106</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;COMPOUND &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;compound&#39;</span><span class="p">]</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">SORTKEY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Redshift-107"><a href="#Redshift-107"><span class="linenos">107</span></a> <span class="p">}</span>
</span><span id="Redshift-108"><a href="#Redshift-108"><span class="linenos">108</span></a>
</span><span id="Redshift-109"><a href="#Redshift-109"><span class="linenos">109</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
</span><span id="Redshift-110"><a href="#Redshift-110"><span class="linenos">110</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">)</span>
</span><span id="Redshift-111"><a href="#Redshift-111"><span class="linenos">111</span></a>
</span><span id="Redshift-112"><a href="#Redshift-112"><span class="linenos">112</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
</span><span id="Redshift-113"><a href="#Redshift-113"><span class="linenos">113</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">)</span>
</span><span id="Redshift-114"><a href="#Redshift-114"><span class="linenos">114</span></a>
</span><span id="Redshift-115"><a href="#Redshift-115"><span class="linenos">115</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
</span><span id="Redshift-55"><a href="#Redshift-55"><span class="linenos"> 55</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Redshift-56"><a href="#Redshift-56"><span class="linenos"> 56</span></a>
</span><span id="Redshift-57"><a href="#Redshift-57"><span class="linenos"> 57</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Redshift-58"><a href="#Redshift-58"><span class="linenos"> 58</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Redshift-59"><a href="#Redshift-59"><span class="linenos"> 59</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Redshift-60"><a href="#Redshift-60"><span class="linenos"> 60</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
</span><span id="Redshift-61"><a href="#Redshift-61"><span class="linenos"> 61</span></a>
</span><span id="Redshift-62"><a href="#Redshift-62"><span class="linenos"> 62</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift-63"><a href="#Redshift-63"><span class="linenos"> 63</span></a> <span class="o">**</span><span class="n">Postgres</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="Redshift-64"><a href="#Redshift-64"><span class="linenos"> 64</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
</span><span id="Redshift-65"><a href="#Redshift-65"><span class="linenos"> 65</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
</span><span id="Redshift-66"><a href="#Redshift-66"><span class="linenos"> 66</span></a> <span class="s2">&quot;SYSDATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">,</span>
</span><span id="Redshift-67"><a href="#Redshift-67"><span class="linenos"> 67</span></a> <span class="s2">&quot;TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
</span><span id="Redshift-68"><a href="#Redshift-68"><span class="linenos"> 68</span></a> <span class="s2">&quot;TIMETZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
</span><span id="Redshift-69"><a href="#Redshift-69"><span class="linenos"> 69</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
</span><span id="Redshift-70"><a href="#Redshift-70"><span class="linenos"> 70</span></a> <span class="s2">&quot;UNLOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
</span><span id="Redshift-71"><a href="#Redshift-71"><span class="linenos"> 71</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
</span><span id="Redshift-72"><a href="#Redshift-72"><span class="linenos"> 72</span></a> <span class="p">}</span>
</span><span id="Redshift-73"><a href="#Redshift-73"><span class="linenos"> 73</span></a>
</span><span id="Redshift-74"><a href="#Redshift-74"><span class="linenos"> 74</span></a> <span class="c1"># Redshift allows # to appear as a table identifier prefix</span>
</span><span id="Redshift-75"><a href="#Redshift-75"><span class="linenos"> 75</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="Redshift-76"><a href="#Redshift-76"><span class="linenos"> 76</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
</span><span id="Redshift-77"><a href="#Redshift-77"><span class="linenos"> 77</span></a>
</span><span id="Redshift-78"><a href="#Redshift-78"><span class="linenos"> 78</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Redshift-79"><a href="#Redshift-79"><span class="linenos"> 79</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Redshift-80"><a href="#Redshift-80"><span class="linenos"> 80</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Redshift-81"><a href="#Redshift-81"><span class="linenos"> 81</span></a>
</span><span id="Redshift-82"><a href="#Redshift-82"><span class="linenos"> 82</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift-83"><a href="#Redshift-83"><span class="linenos"> 83</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
</span><span id="Redshift-84"><a href="#Redshift-84"><span class="linenos"> 84</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
</span><span id="Redshift-85"><a href="#Redshift-85"><span class="linenos"> 85</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
</span><span id="Redshift-86"><a href="#Redshift-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Redshift-87"><a href="#Redshift-87"><span class="linenos"> 87</span></a> <span class="p">}</span>
</span><span id="Redshift-88"><a href="#Redshift-88"><span class="linenos"> 88</span></a>
</span><span id="Redshift-89"><a href="#Redshift-89"><span class="linenos"> 89</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift-90"><a href="#Redshift-90"><span class="linenos"> 90</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
</span><span id="Redshift-91"><a href="#Redshift-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
</span><span id="Redshift-92"><a href="#Redshift-92"><span class="linenos"> 92</span></a> <span class="p">}</span>
</span><span id="Redshift-93"><a href="#Redshift-93"><span class="linenos"> 93</span></a>
</span><span id="Redshift-94"><a href="#Redshift-94"><span class="linenos"> 94</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift-95"><a href="#Redshift-95"><span class="linenos"> 95</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><span id="Redshift-96"><a href="#Redshift-96"><span class="linenos"> 96</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;SYSDATE&quot;</span><span class="p">,</span>
</span><span id="Redshift-97"><a href="#Redshift-97"><span class="linenos"> 97</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="Redshift-98"><a href="#Redshift-98"><span class="linenos"> 98</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="Redshift-99"><a href="#Redshift-99"><span class="linenos"> 99</span></a> <span class="p">),</span>
</span><span id="Redshift-100"><a href="#Redshift-100"><span class="linenos">100</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="Redshift-101"><a href="#Redshift-101"><span class="linenos">101</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="Redshift-102"><a href="#Redshift-102"><span class="linenos">102</span></a> <span class="p">),</span>
</span><span id="Redshift-103"><a href="#Redshift-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DISTKEY(</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Redshift-104"><a href="#Redshift-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Redshift-105"><a href="#Redshift-105"><span class="linenos">105</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
</span><span id="Redshift-106"><a href="#Redshift-106"><span class="linenos">106</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
</span><span id="Redshift-107"><a href="#Redshift-107"><span class="linenos">107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">]),</span>
</span><span id="Redshift-108"><a href="#Redshift-108"><span class="linenos">108</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;COMPOUND &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;compound&#39;</span><span class="p">]</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">SORTKEY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Redshift-109"><a href="#Redshift-109"><span class="linenos">109</span></a> <span class="p">}</span>
</span><span id="Redshift-110"><a href="#Redshift-110"><span class="linenos">110</span></a>
</span><span id="Redshift-111"><a href="#Redshift-111"><span class="linenos">111</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
</span><span id="Redshift-112"><a href="#Redshift-112"><span class="linenos">112</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">)</span>
</span><span id="Redshift-113"><a href="#Redshift-113"><span class="linenos">113</span></a>
</span><span id="Redshift-114"><a href="#Redshift-114"><span class="linenos">114</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
</span><span id="Redshift-115"><a href="#Redshift-115"><span class="linenos">115</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">)</span>
</span><span id="Redshift-116"><a href="#Redshift-116"><span class="linenos">116</span></a>
</span><span id="Redshift-117"><a href="#Redshift-117"><span class="linenos">117</span></a> <span class="k">def</span> <span class="nf">values_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift-118"><a href="#Redshift-118"><span class="linenos">118</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Redshift-119"><a href="#Redshift-119"><span class="linenos">119</span></a><span class="sd"> Converts `VALUES...` expression into a series of unions.</span>
</span><span id="Redshift-120"><a href="#Redshift-120"><span class="linenos">120</span></a>
</span><span id="Redshift-121"><a href="#Redshift-121"><span class="linenos">121</span></a><span class="sd"> Note: If you have a lot of unions then this will result in a large number of recursive statements to</span>
</span><span id="Redshift-122"><a href="#Redshift-122"><span class="linenos">122</span></a><span class="sd"> evaluate the expression. You may need to increase `sys.setrecursionlimit` to run and it can also be</span>
</span><span id="Redshift-123"><a href="#Redshift-123"><span class="linenos">123</span></a><span class="sd"> very slow.</span>
</span><span id="Redshift-124"><a href="#Redshift-124"><span class="linenos">124</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Redshift-125"><a href="#Redshift-125"><span class="linenos">125</span></a>
</span><span id="Redshift-126"><a href="#Redshift-126"><span class="linenos">126</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
</span><span id="Redshift-127"><a href="#Redshift-127"><span class="linenos">127</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
</span><span id="Redshift-128"><a href="#Redshift-128"><span class="linenos">128</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Redshift-129"><a href="#Redshift-129"><span class="linenos">129</span></a>
</span><span id="Redshift-130"><a href="#Redshift-130"><span class="linenos">130</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">columns</span>
</span><span id="Redshift-117"><a href="#Redshift-117"><span class="linenos">117</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
</span><span id="Redshift-118"><a href="#Redshift-118"><span class="linenos">118</span></a>
</span><span id="Redshift-119"><a href="#Redshift-119"><span class="linenos">119</span></a> <span class="k">def</span> <span class="nf">values_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift-120"><a href="#Redshift-120"><span class="linenos">120</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Redshift-121"><a href="#Redshift-121"><span class="linenos">121</span></a><span class="sd"> Converts `VALUES...` expression into a series of unions.</span>
</span><span id="Redshift-122"><a href="#Redshift-122"><span class="linenos">122</span></a>
</span><span id="Redshift-123"><a href="#Redshift-123"><span class="linenos">123</span></a><span class="sd"> Note: If you have a lot of unions then this will result in a large number of recursive statements to</span>
</span><span id="Redshift-124"><a href="#Redshift-124"><span class="linenos">124</span></a><span class="sd"> evaluate the expression. You may need to increase `sys.setrecursionlimit` to run and it can also be</span>
</span><span id="Redshift-125"><a href="#Redshift-125"><span class="linenos">125</span></a><span class="sd"> very slow.</span>
</span><span id="Redshift-126"><a href="#Redshift-126"><span class="linenos">126</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Redshift-127"><a href="#Redshift-127"><span class="linenos">127</span></a>
</span><span id="Redshift-128"><a href="#Redshift-128"><span class="linenos">128</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
</span><span id="Redshift-129"><a href="#Redshift-129"><span class="linenos">129</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
</span><span id="Redshift-130"><a href="#Redshift-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Redshift-131"><a href="#Redshift-131"><span class="linenos">131</span></a>
</span><span id="Redshift-132"><a href="#Redshift-132"><span class="linenos">132</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Redshift-133"><a href="#Redshift-133"><span class="linenos">133</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="n">tuple_exp</span><span class="o">.</span><span class="n">expressions</span> <span class="k">for</span> <span class="n">tuple_exp</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
</span><span id="Redshift-134"><a href="#Redshift-134"><span class="linenos">134</span></a>
</span><span id="Redshift-135"><a href="#Redshift-135"><span class="linenos">135</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">rows</span><span class="p">):</span>
</span><span id="Redshift-136"><a href="#Redshift-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
</span><span id="Redshift-137"><a href="#Redshift-137"><span class="linenos">137</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
</span><span id="Redshift-138"><a href="#Redshift-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span>
</span><span id="Redshift-139"><a href="#Redshift-139"><span class="linenos">139</span></a> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
</span><span id="Redshift-140"><a href="#Redshift-140"><span class="linenos">140</span></a> <span class="p">]</span>
</span><span id="Redshift-141"><a href="#Redshift-141"><span class="linenos">141</span></a>
</span><span id="Redshift-142"><a href="#Redshift-142"><span class="linenos">142</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
</span><span id="Redshift-132"><a href="#Redshift-132"><span class="linenos">132</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">columns</span>
</span><span id="Redshift-133"><a href="#Redshift-133"><span class="linenos">133</span></a>
</span><span id="Redshift-134"><a href="#Redshift-134"><span class="linenos">134</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Redshift-135"><a href="#Redshift-135"><span class="linenos">135</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="n">tuple_exp</span><span class="o">.</span><span class="n">expressions</span> <span class="k">for</span> <span class="n">tuple_exp</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
</span><span id="Redshift-136"><a href="#Redshift-136"><span class="linenos">136</span></a>
</span><span id="Redshift-137"><a href="#Redshift-137"><span class="linenos">137</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">rows</span><span class="p">):</span>
</span><span id="Redshift-138"><a href="#Redshift-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
</span><span id="Redshift-139"><a href="#Redshift-139"><span class="linenos">139</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
</span><span id="Redshift-140"><a href="#Redshift-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span>
</span><span id="Redshift-141"><a href="#Redshift-141"><span class="linenos">141</span></a> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
</span><span id="Redshift-142"><a href="#Redshift-142"><span class="linenos">142</span></a> <span class="p">]</span>
</span><span id="Redshift-143"><a href="#Redshift-143"><span class="linenos">143</span></a>
</span><span id="Redshift-144"><a href="#Redshift-144"><span class="linenos">144</span></a> <span class="n">subquery_expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="Redshift-145"><a href="#Redshift-145"><span class="linenos">145</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selects</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Redshift-146"><a href="#Redshift-146"><span class="linenos">146</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
</span><span id="Redshift-147"><a href="#Redshift-147"><span class="linenos">147</span></a> <span class="n">subquery_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">subquery_expression</span><span class="p">,</span> <span class="n">select</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Redshift-148"><a href="#Redshift-148"><span class="linenos">148</span></a>
</span><span id="Redshift-149"><a href="#Redshift-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">subquery_expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">))</span>
</span><span id="Redshift-144"><a href="#Redshift-144"><span class="linenos">144</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
</span><span id="Redshift-145"><a href="#Redshift-145"><span class="linenos">145</span></a>
</span><span id="Redshift-146"><a href="#Redshift-146"><span class="linenos">146</span></a> <span class="n">subquery_expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="Redshift-147"><a href="#Redshift-147"><span class="linenos">147</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selects</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Redshift-148"><a href="#Redshift-148"><span class="linenos">148</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
</span><span id="Redshift-149"><a href="#Redshift-149"><span class="linenos">149</span></a> <span class="n">subquery_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">subquery_expression</span><span class="p">,</span> <span class="n">select</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Redshift-150"><a href="#Redshift-150"><span class="linenos">150</span></a>
</span><span id="Redshift-151"><a href="#Redshift-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift-152"><a href="#Redshift-152"><span class="linenos">152</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
</span><span id="Redshift-153"><a href="#Redshift-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span id="Redshift-154"><a href="#Redshift-154"><span class="linenos">154</span></a>
</span><span id="Redshift-155"><a href="#Redshift-155"><span class="linenos">155</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift-156"><a href="#Redshift-156"><span class="linenos">156</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Redshift-157"><a href="#Redshift-157"><span class="linenos">157</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
</span><span id="Redshift-158"><a href="#Redshift-158"><span class="linenos">158</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
</span><span id="Redshift-159"><a href="#Redshift-159"><span class="linenos">159</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
</span><span id="Redshift-160"><a href="#Redshift-160"><span class="linenos">160</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
</span><span id="Redshift-161"><a href="#Redshift-161"><span class="linenos">161</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Redshift-162"><a href="#Redshift-162"><span class="linenos">162</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span>
</span><span id="Redshift-163"><a href="#Redshift-163"><span class="linenos">163</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="Redshift-164"><a href="#Redshift-164"><span class="linenos">164</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
</span><span id="Redshift-165"><a href="#Redshift-165"><span class="linenos">165</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
</span><span id="Redshift-166"><a href="#Redshift-166"><span class="linenos">166</span></a>
</span><span id="Redshift-167"><a href="#Redshift-167"><span class="linenos">167</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
</span><span id="Redshift-168"><a href="#Redshift-168"><span class="linenos">168</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
</span><span id="Redshift-169"><a href="#Redshift-169"><span class="linenos">169</span></a>
</span><span id="Redshift-170"><a href="#Redshift-170"><span class="linenos">170</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Redshift-151"><a href="#Redshift-151"><span class="linenos">151</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">subquery_expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">))</span>
</span><span id="Redshift-152"><a href="#Redshift-152"><span class="linenos">152</span></a>
</span><span id="Redshift-153"><a href="#Redshift-153"><span class="linenos">153</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift-154"><a href="#Redshift-154"><span class="linenos">154</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
</span><span id="Redshift-155"><a href="#Redshift-155"><span class="linenos">155</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span id="Redshift-156"><a href="#Redshift-156"><span class="linenos">156</span></a>
</span><span id="Redshift-157"><a href="#Redshift-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift-158"><a href="#Redshift-158"><span class="linenos">158</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Redshift-159"><a href="#Redshift-159"><span class="linenos">159</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
</span><span id="Redshift-160"><a href="#Redshift-160"><span class="linenos">160</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
</span><span id="Redshift-161"><a href="#Redshift-161"><span class="linenos">161</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
</span><span id="Redshift-162"><a href="#Redshift-162"><span class="linenos">162</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
</span><span id="Redshift-163"><a href="#Redshift-163"><span class="linenos">163</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Redshift-164"><a href="#Redshift-164"><span class="linenos">164</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
</span><span id="Redshift-165"><a href="#Redshift-165"><span class="linenos">165</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="Redshift-166"><a href="#Redshift-166"><span class="linenos">166</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
</span><span id="Redshift-167"><a href="#Redshift-167"><span class="linenos">167</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
</span><span id="Redshift-168"><a href="#Redshift-168"><span class="linenos">168</span></a>
</span><span id="Redshift-169"><a href="#Redshift-169"><span class="linenos">169</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
</span><span id="Redshift-170"><a href="#Redshift-170"><span class="linenos">170</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
</span><span id="Redshift-171"><a href="#Redshift-171"><span class="linenos">171</span></a>
</span><span id="Redshift-172"><a href="#Redshift-172"><span class="linenos">172</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@ -477,18 +481,20 @@
</span><span id="Redshift.Parser-39"><a href="#Redshift.Parser-39"><span class="linenos">39</span></a>
</span><span id="Redshift.Parser-40"><a href="#Redshift.Parser-40"><span class="linenos">40</span></a> <span class="n">CONVERT_TYPE_FIRST</span> <span class="o">=</span> <span class="kc">True</span>
</span><span id="Redshift.Parser-41"><a href="#Redshift.Parser-41"><span class="linenos">41</span></a>
</span><span id="Redshift.Parser-42"><a href="#Redshift.Parser-42"><span class="linenos">42</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Redshift.Parser-43"><a href="#Redshift.Parser-43"><span class="linenos">43</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">)</span>
</span><span id="Redshift.Parser-44"><a href="#Redshift.Parser-44"><span class="linenos">44</span></a>
</span><span id="Redshift.Parser-45"><a href="#Redshift.Parser-45"><span class="linenos">45</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Redshift.Parser-46"><a href="#Redshift.Parser-46"><span class="linenos">46</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
</span><span id="Redshift.Parser-47"><a href="#Redshift.Parser-47"><span class="linenos">47</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span>
</span><span id="Redshift.Parser-48"><a href="#Redshift.Parser-48"><span class="linenos">48</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
</span><span id="Redshift.Parser-49"><a href="#Redshift.Parser-49"><span class="linenos">49</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
</span><span id="Redshift.Parser-50"><a href="#Redshift.Parser-50"><span class="linenos">50</span></a> <span class="p">):</span>
</span><span id="Redshift.Parser-51"><a href="#Redshift.Parser-51"><span class="linenos">51</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</span>
</span><span id="Redshift.Parser-52"><a href="#Redshift.Parser-52"><span class="linenos">52</span></a>
</span><span id="Redshift.Parser-53"><a href="#Redshift.Parser-53"><span class="linenos">53</span></a> <span class="k">return</span> <span class="n">this</span>
</span><span id="Redshift.Parser-42"><a href="#Redshift.Parser-42"><span class="linenos">42</span></a> <span class="k">def</span> <span class="nf">_parse_types</span><span class="p">(</span>
</span><span id="Redshift.Parser-43"><a href="#Redshift.Parser-43"><span class="linenos">43</span></a> <span class="bp">self</span><span class="p">,</span> <span class="n">check_func</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="n">schema</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Redshift.Parser-44"><a href="#Redshift.Parser-44"><span class="linenos">44</span></a> <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Redshift.Parser-45"><a href="#Redshift.Parser-45"><span class="linenos">45</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">_parse_types</span><span class="p">(</span><span class="n">check_func</span><span class="o">=</span><span class="n">check_func</span><span class="p">,</span> <span class="n">schema</span><span class="o">=</span><span class="n">schema</span><span class="p">)</span>
</span><span id="Redshift.Parser-46"><a href="#Redshift.Parser-46"><span class="linenos">46</span></a>
</span><span id="Redshift.Parser-47"><a href="#Redshift.Parser-47"><span class="linenos">47</span></a> <span class="k">if</span> <span class="p">(</span>
</span><span id="Redshift.Parser-48"><a href="#Redshift.Parser-48"><span class="linenos">48</span></a> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
</span><span id="Redshift.Parser-49"><a href="#Redshift.Parser-49"><span class="linenos">49</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;varchar&quot;</span><span class="p">)</span>
</span><span id="Redshift.Parser-50"><a href="#Redshift.Parser-50"><span class="linenos">50</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span>
</span><span id="Redshift.Parser-51"><a href="#Redshift.Parser-51"><span class="linenos">51</span></a> <span class="ow">and</span> <span class="n">this</span><span class="o">.</span><span class="n">expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">column</span><span class="p">(</span><span class="s2">&quot;MAX&quot;</span><span class="p">)</span>
</span><span id="Redshift.Parser-52"><a href="#Redshift.Parser-52"><span class="linenos">52</span></a> <span class="p">):</span>
</span><span id="Redshift.Parser-53"><a href="#Redshift.Parser-53"><span class="linenos">53</span></a> <span class="n">this</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;MAX&quot;</span><span class="p">)])</span>
</span><span id="Redshift.Parser-54"><a href="#Redshift.Parser-54"><span class="linenos">54</span></a>
</span><span id="Redshift.Parser-55"><a href="#Redshift.Parser-55"><span class="linenos">55</span></a> <span class="k">return</span> <span class="n">this</span>
</span></pre></div>
@ -499,7 +505,7 @@ a parsed syntax tree.</p>
<ul>
<li><strong>error_level:</strong> the desired error level.
Default: ErrorLevel.RAISE</li>
Default: ErrorLevel.IMMEDIATE</li>
<li><strong>error_message_context:</strong> determines the amount of context to capture from a
query string when displaying the error message (in number of characters).
Default: 50.</li>
@ -545,26 +551,26 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#Redshift.Tokenizer"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Tokenizer-55"><a href="#Redshift.Tokenizer-55"><span class="linenos">55</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Redshift.Tokenizer-56"><a href="#Redshift.Tokenizer-56"><span class="linenos">56</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Redshift.Tokenizer-57"><a href="#Redshift.Tokenizer-57"><span class="linenos">57</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Redshift.Tokenizer-58"><a href="#Redshift.Tokenizer-58"><span class="linenos">58</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
</span><span id="Redshift.Tokenizer-59"><a href="#Redshift.Tokenizer-59"><span class="linenos">59</span></a>
</span><span id="Redshift.Tokenizer-60"><a href="#Redshift.Tokenizer-60"><span class="linenos">60</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift.Tokenizer-61"><a href="#Redshift.Tokenizer-61"><span class="linenos">61</span></a> <span class="o">**</span><span class="n">Postgres</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="Redshift.Tokenizer-62"><a href="#Redshift.Tokenizer-62"><span class="linenos">62</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-63"><a href="#Redshift.Tokenizer-63"><span class="linenos">63</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-64"><a href="#Redshift.Tokenizer-64"><span class="linenos">64</span></a> <span class="s2">&quot;SYSDATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-65"><a href="#Redshift.Tokenizer-65"><span class="linenos">65</span></a> <span class="s2">&quot;TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-66"><a href="#Redshift.Tokenizer-66"><span class="linenos">66</span></a> <span class="s2">&quot;TIMETZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-67"><a href="#Redshift.Tokenizer-67"><span class="linenos">67</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-68"><a href="#Redshift.Tokenizer-68"><span class="linenos">68</span></a> <span class="s2">&quot;UNLOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-69"><a href="#Redshift.Tokenizer-69"><span class="linenos">69</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-70"><a href="#Redshift.Tokenizer-70"><span class="linenos">70</span></a> <span class="p">}</span>
</span><span id="Redshift.Tokenizer-71"><a href="#Redshift.Tokenizer-71"><span class="linenos">71</span></a>
</span><span id="Redshift.Tokenizer-72"><a href="#Redshift.Tokenizer-72"><span class="linenos">72</span></a> <span class="c1"># Redshift allows # to appear as a table identifier prefix</span>
</span><span id="Redshift.Tokenizer-73"><a href="#Redshift.Tokenizer-73"><span class="linenos">73</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="Redshift.Tokenizer-74"><a href="#Redshift.Tokenizer-74"><span class="linenos">74</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Tokenizer-57"><a href="#Redshift.Tokenizer-57"><span class="linenos">57</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Redshift.Tokenizer-58"><a href="#Redshift.Tokenizer-58"><span class="linenos">58</span></a> <span class="n">BIT_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Redshift.Tokenizer-59"><a href="#Redshift.Tokenizer-59"><span class="linenos">59</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Redshift.Tokenizer-60"><a href="#Redshift.Tokenizer-60"><span class="linenos">60</span></a> <span class="n">STRING_ESCAPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">]</span>
</span><span id="Redshift.Tokenizer-61"><a href="#Redshift.Tokenizer-61"><span class="linenos">61</span></a>
</span><span id="Redshift.Tokenizer-62"><a href="#Redshift.Tokenizer-62"><span class="linenos">62</span></a> <span class="n">KEYWORDS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift.Tokenizer-63"><a href="#Redshift.Tokenizer-63"><span class="linenos">63</span></a> <span class="o">**</span><span class="n">Postgres</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="Redshift.Tokenizer-64"><a href="#Redshift.Tokenizer-64"><span class="linenos">64</span></a> <span class="s2">&quot;HLLSKETCH&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">HLLSKETCH</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-65"><a href="#Redshift.Tokenizer-65"><span class="linenos">65</span></a> <span class="s2">&quot;SUPER&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">SUPER</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-66"><a href="#Redshift.Tokenizer-66"><span class="linenos">66</span></a> <span class="s2">&quot;SYSDATE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">CURRENT_TIMESTAMP</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-67"><a href="#Redshift.Tokenizer-67"><span class="linenos">67</span></a> <span class="s2">&quot;TIME&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMP</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-68"><a href="#Redshift.Tokenizer-68"><span class="linenos">68</span></a> <span class="s2">&quot;TIMETZ&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TIMESTAMPTZ</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-69"><a href="#Redshift.Tokenizer-69"><span class="linenos">69</span></a> <span class="s2">&quot;TOP&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">TOP</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-70"><a href="#Redshift.Tokenizer-70"><span class="linenos">70</span></a> <span class="s2">&quot;UNLOAD&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">COMMAND</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-71"><a href="#Redshift.Tokenizer-71"><span class="linenos">71</span></a> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">:</span> <span class="n">TokenType</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">,</span>
</span><span id="Redshift.Tokenizer-72"><a href="#Redshift.Tokenizer-72"><span class="linenos">72</span></a> <span class="p">}</span>
</span><span id="Redshift.Tokenizer-73"><a href="#Redshift.Tokenizer-73"><span class="linenos">73</span></a>
</span><span id="Redshift.Tokenizer-74"><a href="#Redshift.Tokenizer-74"><span class="linenos">74</span></a> <span class="c1"># Redshift allows # to appear as a table identifier prefix</span>
</span><span id="Redshift.Tokenizer-75"><a href="#Redshift.Tokenizer-75"><span class="linenos">75</span></a> <span class="n">SINGLE_TOKENS</span> <span class="o">=</span> <span class="n">Postgres</span><span class="o">.</span><span class="n">Tokenizer</span><span class="o">.</span><span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="Redshift.Tokenizer-76"><a href="#Redshift.Tokenizer-76"><span class="linenos">76</span></a> <span class="n">SINGLE_TOKENS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
</span></pre></div>
@ -592,101 +598,101 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#Redshift.Generator"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator-76"><a href="#Redshift.Generator-76"><span class="linenos"> 76</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Redshift.Generator-77"><a href="#Redshift.Generator-77"><span class="linenos"> 77</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Redshift.Generator-78"><a href="#Redshift.Generator-78"><span class="linenos"> 78</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Redshift.Generator-79"><a href="#Redshift.Generator-79"><span class="linenos"> 79</span></a>
</span><span id="Redshift.Generator-80"><a href="#Redshift.Generator-80"><span class="linenos"> 80</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift.Generator-81"><a href="#Redshift.Generator-81"><span class="linenos"> 81</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
</span><span id="Redshift.Generator-82"><a href="#Redshift.Generator-82"><span class="linenos"> 82</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
</span><span id="Redshift.Generator-83"><a href="#Redshift.Generator-83"><span class="linenos"> 83</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
</span><span id="Redshift.Generator-84"><a href="#Redshift.Generator-84"><span class="linenos"> 84</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Redshift.Generator-85"><a href="#Redshift.Generator-85"><span class="linenos"> 85</span></a> <span class="p">}</span>
</span><span id="Redshift.Generator-86"><a href="#Redshift.Generator-86"><span class="linenos"> 86</span></a>
</span><span id="Redshift.Generator-87"><a href="#Redshift.Generator-87"><span class="linenos"> 87</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift.Generator-88"><a href="#Redshift.Generator-88"><span class="linenos"> 88</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
</span><span id="Redshift.Generator-89"><a href="#Redshift.Generator-89"><span class="linenos"> 89</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
</span><span id="Redshift.Generator-90"><a href="#Redshift.Generator-90"><span class="linenos"> 90</span></a> <span class="p">}</span>
</span><span id="Redshift.Generator-91"><a href="#Redshift.Generator-91"><span class="linenos"> 91</span></a>
</span><span id="Redshift.Generator-92"><a href="#Redshift.Generator-92"><span class="linenos"> 92</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift.Generator-93"><a href="#Redshift.Generator-93"><span class="linenos"> 93</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><span id="Redshift.Generator-94"><a href="#Redshift.Generator-94"><span class="linenos"> 94</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;SYSDATE&quot;</span><span class="p">,</span>
</span><span id="Redshift.Generator-95"><a href="#Redshift.Generator-95"><span class="linenos"> 95</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="Redshift.Generator-96"><a href="#Redshift.Generator-96"><span class="linenos"> 96</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="Redshift.Generator-97"><a href="#Redshift.Generator-97"><span class="linenos"> 97</span></a> <span class="p">),</span>
</span><span id="Redshift.Generator-98"><a href="#Redshift.Generator-98"><span class="linenos"> 98</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="Redshift.Generator-99"><a href="#Redshift.Generator-99"><span class="linenos"> 99</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="Redshift.Generator-100"><a href="#Redshift.Generator-100"><span class="linenos">100</span></a> <span class="p">),</span>
</span><span id="Redshift.Generator-101"><a href="#Redshift.Generator-101"><span class="linenos">101</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DISTKEY(</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Redshift.Generator-102"><a href="#Redshift.Generator-102"><span class="linenos">102</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Redshift.Generator-103"><a href="#Redshift.Generator-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
</span><span id="Redshift.Generator-104"><a href="#Redshift.Generator-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
</span><span id="Redshift.Generator-105"><a href="#Redshift.Generator-105"><span class="linenos">105</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">]),</span>
</span><span id="Redshift.Generator-106"><a href="#Redshift.Generator-106"><span class="linenos">106</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;COMPOUND &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;compound&#39;</span><span class="p">]</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">SORTKEY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Redshift.Generator-107"><a href="#Redshift.Generator-107"><span class="linenos">107</span></a> <span class="p">}</span>
</span><span id="Redshift.Generator-108"><a href="#Redshift.Generator-108"><span class="linenos">108</span></a>
</span><span id="Redshift.Generator-109"><a href="#Redshift.Generator-109"><span class="linenos">109</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
</span><span id="Redshift.Generator-110"><a href="#Redshift.Generator-110"><span class="linenos">110</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">)</span>
</span><span id="Redshift.Generator-111"><a href="#Redshift.Generator-111"><span class="linenos">111</span></a>
</span><span id="Redshift.Generator-112"><a href="#Redshift.Generator-112"><span class="linenos">112</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
</span><span id="Redshift.Generator-113"><a href="#Redshift.Generator-113"><span class="linenos">113</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">)</span>
</span><span id="Redshift.Generator-114"><a href="#Redshift.Generator-114"><span class="linenos">114</span></a>
</span><span id="Redshift.Generator-115"><a href="#Redshift.Generator-115"><span class="linenos">115</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator-78"><a href="#Redshift.Generator-78"><span class="linenos"> 78</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Redshift.Generator-79"><a href="#Redshift.Generator-79"><span class="linenos"> 79</span></a> <span class="n">LOCKING_READS_SUPPORTED</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Redshift.Generator-80"><a href="#Redshift.Generator-80"><span class="linenos"> 80</span></a> <span class="n">RENAME_TABLE_WITH_DB</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Redshift.Generator-81"><a href="#Redshift.Generator-81"><span class="linenos"> 81</span></a>
</span><span id="Redshift.Generator-82"><a href="#Redshift.Generator-82"><span class="linenos"> 82</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift.Generator-83"><a href="#Redshift.Generator-83"><span class="linenos"> 83</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
</span><span id="Redshift.Generator-84"><a href="#Redshift.Generator-84"><span class="linenos"> 84</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
</span><span id="Redshift.Generator-85"><a href="#Redshift.Generator-85"><span class="linenos"> 85</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARBINARY</span><span class="p">:</span> <span class="s2">&quot;VARBYTE&quot;</span><span class="p">,</span>
</span><span id="Redshift.Generator-86"><a href="#Redshift.Generator-86"><span class="linenos"> 86</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">INT</span><span class="p">:</span> <span class="s2">&quot;INTEGER&quot;</span><span class="p">,</span>
</span><span id="Redshift.Generator-87"><a href="#Redshift.Generator-87"><span class="linenos"> 87</span></a> <span class="p">}</span>
</span><span id="Redshift.Generator-88"><a href="#Redshift.Generator-88"><span class="linenos"> 88</span></a>
</span><span id="Redshift.Generator-89"><a href="#Redshift.Generator-89"><span class="linenos"> 89</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift.Generator-90"><a href="#Redshift.Generator-90"><span class="linenos"> 90</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
</span><span id="Redshift.Generator-91"><a href="#Redshift.Generator-91"><span class="linenos"> 91</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LikeProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_WITH</span><span class="p">,</span>
</span><span id="Redshift.Generator-92"><a href="#Redshift.Generator-92"><span class="linenos"> 92</span></a> <span class="p">}</span>
</span><span id="Redshift.Generator-93"><a href="#Redshift.Generator-93"><span class="linenos"> 93</span></a>
</span><span id="Redshift.Generator-94"><a href="#Redshift.Generator-94"><span class="linenos"> 94</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Redshift.Generator-95"><a href="#Redshift.Generator-95"><span class="linenos"> 95</span></a> <span class="o">**</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><span id="Redshift.Generator-96"><a href="#Redshift.Generator-96"><span class="linenos"> 96</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CurrentTimestamp</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="s2">&quot;SYSDATE&quot;</span><span class="p">,</span>
</span><span id="Redshift.Generator-97"><a href="#Redshift.Generator-97"><span class="linenos"> 97</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateAdd</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="Redshift.Generator-98"><a href="#Redshift.Generator-98"><span class="linenos"> 98</span></a> <span class="s2">&quot;DATEADD&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="Redshift.Generator-99"><a href="#Redshift.Generator-99"><span class="linenos"> 99</span></a> <span class="p">),</span>
</span><span id="Redshift.Generator-100"><a href="#Redshift.Generator-100"><span class="linenos">100</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateDiff</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="Redshift.Generator-101"><a href="#Redshift.Generator-101"><span class="linenos">101</span></a> <span class="s2">&quot;DATEDIFF&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;day&quot;</span><span class="p">),</span> <span class="n">e</span><span class="o">.</span><span class="n">expression</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="Redshift.Generator-102"><a href="#Redshift.Generator-102"><span class="linenos">102</span></a> <span class="p">),</span>
</span><span id="Redshift.Generator-103"><a href="#Redshift.Generator-103"><span class="linenos">103</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;DISTKEY(</span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Redshift.Generator-104"><a href="#Redshift.Generator-104"><span class="linenos">104</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DistStyleProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">naked_property</span><span class="p">(</span><span class="n">e</span><span class="p">),</span>
</span><span id="Redshift.Generator-105"><a href="#Redshift.Generator-105"><span class="linenos">105</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtract</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
</span><span id="Redshift.Generator-106"><a href="#Redshift.Generator-106"><span class="linenos">106</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">JSONExtractScalar</span><span class="p">:</span> <span class="n">_json_sql</span><span class="p">,</span>
</span><span id="Redshift.Generator-107"><a href="#Redshift.Generator-107"><span class="linenos">107</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">transforms</span><span class="o">.</span><span class="n">eliminate_distinct_on</span><span class="p">]),</span>
</span><span id="Redshift.Generator-108"><a href="#Redshift.Generator-108"><span class="linenos">108</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">SortKeyProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;COMPOUND &#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s1">&#39;compound&#39;</span><span class="p">]</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span><span class="s2">SORTKEY(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_args</span><span class="p">(</span><span class="o">*</span><span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Redshift.Generator-109"><a href="#Redshift.Generator-109"><span class="linenos">109</span></a> <span class="p">}</span>
</span><span id="Redshift.Generator-110"><a href="#Redshift.Generator-110"><span class="linenos">110</span></a>
</span><span id="Redshift.Generator-111"><a href="#Redshift.Generator-111"><span class="linenos">111</span></a> <span class="c1"># Postgres maps exp.Pivot to no_pivot_sql, but Redshift support pivots</span>
</span><span id="Redshift.Generator-112"><a href="#Redshift.Generator-112"><span class="linenos">112</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">)</span>
</span><span id="Redshift.Generator-113"><a href="#Redshift.Generator-113"><span class="linenos">113</span></a>
</span><span id="Redshift.Generator-114"><a href="#Redshift.Generator-114"><span class="linenos">114</span></a> <span class="c1"># Redshift uses the POW | POWER (expr1, expr2) syntax instead of expr1 ^ expr2 (postgres)</span>
</span><span id="Redshift.Generator-115"><a href="#Redshift.Generator-115"><span class="linenos">115</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Pow</span><span class="p">)</span>
</span><span id="Redshift.Generator-116"><a href="#Redshift.Generator-116"><span class="linenos">116</span></a>
</span><span id="Redshift.Generator-117"><a href="#Redshift.Generator-117"><span class="linenos">117</span></a> <span class="k">def</span> <span class="nf">values_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift.Generator-118"><a href="#Redshift.Generator-118"><span class="linenos">118</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Redshift.Generator-119"><a href="#Redshift.Generator-119"><span class="linenos">119</span></a><span class="sd"> Converts `VALUES...` expression into a series of unions.</span>
</span><span id="Redshift.Generator-120"><a href="#Redshift.Generator-120"><span class="linenos">120</span></a>
</span><span id="Redshift.Generator-121"><a href="#Redshift.Generator-121"><span class="linenos">121</span></a><span class="sd"> Note: If you have a lot of unions then this will result in a large number of recursive statements to</span>
</span><span id="Redshift.Generator-122"><a href="#Redshift.Generator-122"><span class="linenos">122</span></a><span class="sd"> evaluate the expression. You may need to increase `sys.setrecursionlimit` to run and it can also be</span>
</span><span id="Redshift.Generator-123"><a href="#Redshift.Generator-123"><span class="linenos">123</span></a><span class="sd"> very slow.</span>
</span><span id="Redshift.Generator-124"><a href="#Redshift.Generator-124"><span class="linenos">124</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Redshift.Generator-125"><a href="#Redshift.Generator-125"><span class="linenos">125</span></a>
</span><span id="Redshift.Generator-126"><a href="#Redshift.Generator-126"><span class="linenos">126</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
</span><span id="Redshift.Generator-127"><a href="#Redshift.Generator-127"><span class="linenos">127</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
</span><span id="Redshift.Generator-128"><a href="#Redshift.Generator-128"><span class="linenos">128</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Redshift.Generator-129"><a href="#Redshift.Generator-129"><span class="linenos">129</span></a>
</span><span id="Redshift.Generator-130"><a href="#Redshift.Generator-130"><span class="linenos">130</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">columns</span>
</span><span id="Redshift.Generator-117"><a href="#Redshift.Generator-117"><span class="linenos">117</span></a> <span class="n">RESERVED_KEYWORDS</span> <span class="o">=</span> <span class="p">{</span><span class="o">*</span><span class="n">Postgres</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">RESERVED_KEYWORDS</span><span class="p">,</span> <span class="s2">&quot;snapshot&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">}</span>
</span><span id="Redshift.Generator-118"><a href="#Redshift.Generator-118"><span class="linenos">118</span></a>
</span><span id="Redshift.Generator-119"><a href="#Redshift.Generator-119"><span class="linenos">119</span></a> <span class="k">def</span> <span class="nf">values_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift.Generator-120"><a href="#Redshift.Generator-120"><span class="linenos">120</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Redshift.Generator-121"><a href="#Redshift.Generator-121"><span class="linenos">121</span></a><span class="sd"> Converts `VALUES...` expression into a series of unions.</span>
</span><span id="Redshift.Generator-122"><a href="#Redshift.Generator-122"><span class="linenos">122</span></a>
</span><span id="Redshift.Generator-123"><a href="#Redshift.Generator-123"><span class="linenos">123</span></a><span class="sd"> Note: If you have a lot of unions then this will result in a large number of recursive statements to</span>
</span><span id="Redshift.Generator-124"><a href="#Redshift.Generator-124"><span class="linenos">124</span></a><span class="sd"> evaluate the expression. You may need to increase `sys.setrecursionlimit` to run and it can also be</span>
</span><span id="Redshift.Generator-125"><a href="#Redshift.Generator-125"><span class="linenos">125</span></a><span class="sd"> very slow.</span>
</span><span id="Redshift.Generator-126"><a href="#Redshift.Generator-126"><span class="linenos">126</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Redshift.Generator-127"><a href="#Redshift.Generator-127"><span class="linenos">127</span></a>
</span><span id="Redshift.Generator-128"><a href="#Redshift.Generator-128"><span class="linenos">128</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
</span><span id="Redshift.Generator-129"><a href="#Redshift.Generator-129"><span class="linenos">129</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
</span><span id="Redshift.Generator-130"><a href="#Redshift.Generator-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Redshift.Generator-131"><a href="#Redshift.Generator-131"><span class="linenos">131</span></a>
</span><span id="Redshift.Generator-132"><a href="#Redshift.Generator-132"><span class="linenos">132</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Redshift.Generator-133"><a href="#Redshift.Generator-133"><span class="linenos">133</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="n">tuple_exp</span><span class="o">.</span><span class="n">expressions</span> <span class="k">for</span> <span class="n">tuple_exp</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
</span><span id="Redshift.Generator-134"><a href="#Redshift.Generator-134"><span class="linenos">134</span></a>
</span><span id="Redshift.Generator-135"><a href="#Redshift.Generator-135"><span class="linenos">135</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">rows</span><span class="p">):</span>
</span><span id="Redshift.Generator-136"><a href="#Redshift.Generator-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
</span><span id="Redshift.Generator-137"><a href="#Redshift.Generator-137"><span class="linenos">137</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
</span><span id="Redshift.Generator-138"><a href="#Redshift.Generator-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span>
</span><span id="Redshift.Generator-139"><a href="#Redshift.Generator-139"><span class="linenos">139</span></a> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
</span><span id="Redshift.Generator-140"><a href="#Redshift.Generator-140"><span class="linenos">140</span></a> <span class="p">]</span>
</span><span id="Redshift.Generator-141"><a href="#Redshift.Generator-141"><span class="linenos">141</span></a>
</span><span id="Redshift.Generator-142"><a href="#Redshift.Generator-142"><span class="linenos">142</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
</span><span id="Redshift.Generator-132"><a href="#Redshift.Generator-132"><span class="linenos">132</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">columns</span>
</span><span id="Redshift.Generator-133"><a href="#Redshift.Generator-133"><span class="linenos">133</span></a>
</span><span id="Redshift.Generator-134"><a href="#Redshift.Generator-134"><span class="linenos">134</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Redshift.Generator-135"><a href="#Redshift.Generator-135"><span class="linenos">135</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="n">tuple_exp</span><span class="o">.</span><span class="n">expressions</span> <span class="k">for</span> <span class="n">tuple_exp</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
</span><span id="Redshift.Generator-136"><a href="#Redshift.Generator-136"><span class="linenos">136</span></a>
</span><span id="Redshift.Generator-137"><a href="#Redshift.Generator-137"><span class="linenos">137</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">rows</span><span class="p">):</span>
</span><span id="Redshift.Generator-138"><a href="#Redshift.Generator-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
</span><span id="Redshift.Generator-139"><a href="#Redshift.Generator-139"><span class="linenos">139</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
</span><span id="Redshift.Generator-140"><a href="#Redshift.Generator-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span>
</span><span id="Redshift.Generator-141"><a href="#Redshift.Generator-141"><span class="linenos">141</span></a> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
</span><span id="Redshift.Generator-142"><a href="#Redshift.Generator-142"><span class="linenos">142</span></a> <span class="p">]</span>
</span><span id="Redshift.Generator-143"><a href="#Redshift.Generator-143"><span class="linenos">143</span></a>
</span><span id="Redshift.Generator-144"><a href="#Redshift.Generator-144"><span class="linenos">144</span></a> <span class="n">subquery_expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="Redshift.Generator-145"><a href="#Redshift.Generator-145"><span class="linenos">145</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selects</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Redshift.Generator-146"><a href="#Redshift.Generator-146"><span class="linenos">146</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
</span><span id="Redshift.Generator-147"><a href="#Redshift.Generator-147"><span class="linenos">147</span></a> <span class="n">subquery_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">subquery_expression</span><span class="p">,</span> <span class="n">select</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Redshift.Generator-148"><a href="#Redshift.Generator-148"><span class="linenos">148</span></a>
</span><span id="Redshift.Generator-149"><a href="#Redshift.Generator-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">subquery_expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">))</span>
</span><span id="Redshift.Generator-144"><a href="#Redshift.Generator-144"><span class="linenos">144</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
</span><span id="Redshift.Generator-145"><a href="#Redshift.Generator-145"><span class="linenos">145</span></a>
</span><span id="Redshift.Generator-146"><a href="#Redshift.Generator-146"><span class="linenos">146</span></a> <span class="n">subquery_expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="Redshift.Generator-147"><a href="#Redshift.Generator-147"><span class="linenos">147</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selects</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Redshift.Generator-148"><a href="#Redshift.Generator-148"><span class="linenos">148</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
</span><span id="Redshift.Generator-149"><a href="#Redshift.Generator-149"><span class="linenos">149</span></a> <span class="n">subquery_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">subquery_expression</span><span class="p">,</span> <span class="n">select</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Redshift.Generator-150"><a href="#Redshift.Generator-150"><span class="linenos">150</span></a>
</span><span id="Redshift.Generator-151"><a href="#Redshift.Generator-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift.Generator-152"><a href="#Redshift.Generator-152"><span class="linenos">152</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
</span><span id="Redshift.Generator-153"><a href="#Redshift.Generator-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span id="Redshift.Generator-154"><a href="#Redshift.Generator-154"><span class="linenos">154</span></a>
</span><span id="Redshift.Generator-155"><a href="#Redshift.Generator-155"><span class="linenos">155</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift.Generator-156"><a href="#Redshift.Generator-156"><span class="linenos">156</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Redshift.Generator-157"><a href="#Redshift.Generator-157"><span class="linenos">157</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
</span><span id="Redshift.Generator-158"><a href="#Redshift.Generator-158"><span class="linenos">158</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
</span><span id="Redshift.Generator-159"><a href="#Redshift.Generator-159"><span class="linenos">159</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
</span><span id="Redshift.Generator-160"><a href="#Redshift.Generator-160"><span class="linenos">160</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
</span><span id="Redshift.Generator-161"><a href="#Redshift.Generator-161"><span class="linenos">161</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Redshift.Generator-162"><a href="#Redshift.Generator-162"><span class="linenos">162</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span>
</span><span id="Redshift.Generator-163"><a href="#Redshift.Generator-163"><span class="linenos">163</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="Redshift.Generator-164"><a href="#Redshift.Generator-164"><span class="linenos">164</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
</span><span id="Redshift.Generator-165"><a href="#Redshift.Generator-165"><span class="linenos">165</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
</span><span id="Redshift.Generator-166"><a href="#Redshift.Generator-166"><span class="linenos">166</span></a>
</span><span id="Redshift.Generator-167"><a href="#Redshift.Generator-167"><span class="linenos">167</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
</span><span id="Redshift.Generator-168"><a href="#Redshift.Generator-168"><span class="linenos">168</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
</span><span id="Redshift.Generator-169"><a href="#Redshift.Generator-169"><span class="linenos">169</span></a>
</span><span id="Redshift.Generator-170"><a href="#Redshift.Generator-170"><span class="linenos">170</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Redshift.Generator-151"><a href="#Redshift.Generator-151"><span class="linenos">151</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">subquery_expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">))</span>
</span><span id="Redshift.Generator-152"><a href="#Redshift.Generator-152"><span class="linenos">152</span></a>
</span><span id="Redshift.Generator-153"><a href="#Redshift.Generator-153"><span class="linenos">153</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift.Generator-154"><a href="#Redshift.Generator-154"><span class="linenos">154</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
</span><span id="Redshift.Generator-155"><a href="#Redshift.Generator-155"><span class="linenos">155</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span><span id="Redshift.Generator-156"><a href="#Redshift.Generator-156"><span class="linenos">156</span></a>
</span><span id="Redshift.Generator-157"><a href="#Redshift.Generator-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift.Generator-158"><a href="#Redshift.Generator-158"><span class="linenos">158</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Redshift.Generator-159"><a href="#Redshift.Generator-159"><span class="linenos">159</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
</span><span id="Redshift.Generator-160"><a href="#Redshift.Generator-160"><span class="linenos">160</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
</span><span id="Redshift.Generator-161"><a href="#Redshift.Generator-161"><span class="linenos">161</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
</span><span id="Redshift.Generator-162"><a href="#Redshift.Generator-162"><span class="linenos">162</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
</span><span id="Redshift.Generator-163"><a href="#Redshift.Generator-163"><span class="linenos">163</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Redshift.Generator-164"><a href="#Redshift.Generator-164"><span class="linenos">164</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
</span><span id="Redshift.Generator-165"><a href="#Redshift.Generator-165"><span class="linenos">165</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="Redshift.Generator-166"><a href="#Redshift.Generator-166"><span class="linenos">166</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
</span><span id="Redshift.Generator-167"><a href="#Redshift.Generator-167"><span class="linenos">167</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
</span><span id="Redshift.Generator-168"><a href="#Redshift.Generator-168"><span class="linenos">168</span></a>
</span><span id="Redshift.Generator-169"><a href="#Redshift.Generator-169"><span class="linenos">169</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
</span><span id="Redshift.Generator-170"><a href="#Redshift.Generator-170"><span class="linenos">170</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
</span><span id="Redshift.Generator-171"><a href="#Redshift.Generator-171"><span class="linenos">171</span></a>
</span><span id="Redshift.Generator-172"><a href="#Redshift.Generator-172"><span class="linenos">172</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@ -722,6 +728,8 @@ represents a python time format and the output the target time format</li>
Default: "upper"</li>
<li><strong>alias_post_tablesample (bool):</strong> if the table alias comes after tablesample
Default: False</li>
<li><strong>identifiers_can_start_with_digit (bool):</strong> if an unquoted identifier can start with digit
Default: False</li>
<li><strong>unsupported_level (ErrorLevel):</strong> determines the generator's behavior when it encounters
unsupported expressions. Default ErrorLevel.WARN.</li>
<li><strong>null_ordering (str):</strong> Indicates the default null ordering method to use if not explicitly set.
@ -753,39 +761,39 @@ Default: True</li>
</div>
<a class="headerlink" href="#Redshift.Generator.values_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.values_sql-117"><a href="#Redshift.Generator.values_sql-117"><span class="linenos">117</span></a> <span class="k">def</span> <span class="nf">values_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift.Generator.values_sql-118"><a href="#Redshift.Generator.values_sql-118"><span class="linenos">118</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Redshift.Generator.values_sql-119"><a href="#Redshift.Generator.values_sql-119"><span class="linenos">119</span></a><span class="sd"> Converts `VALUES...` expression into a series of unions.</span>
</span><span id="Redshift.Generator.values_sql-120"><a href="#Redshift.Generator.values_sql-120"><span class="linenos">120</span></a>
</span><span id="Redshift.Generator.values_sql-121"><a href="#Redshift.Generator.values_sql-121"><span class="linenos">121</span></a><span class="sd"> Note: If you have a lot of unions then this will result in a large number of recursive statements to</span>
</span><span id="Redshift.Generator.values_sql-122"><a href="#Redshift.Generator.values_sql-122"><span class="linenos">122</span></a><span class="sd"> evaluate the expression. You may need to increase `sys.setrecursionlimit` to run and it can also be</span>
</span><span id="Redshift.Generator.values_sql-123"><a href="#Redshift.Generator.values_sql-123"><span class="linenos">123</span></a><span class="sd"> very slow.</span>
</span><span id="Redshift.Generator.values_sql-124"><a href="#Redshift.Generator.values_sql-124"><span class="linenos">124</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Redshift.Generator.values_sql-125"><a href="#Redshift.Generator.values_sql-125"><span class="linenos">125</span></a>
</span><span id="Redshift.Generator.values_sql-126"><a href="#Redshift.Generator.values_sql-126"><span class="linenos">126</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
</span><span id="Redshift.Generator.values_sql-127"><a href="#Redshift.Generator.values_sql-127"><span class="linenos">127</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
</span><span id="Redshift.Generator.values_sql-128"><a href="#Redshift.Generator.values_sql-128"><span class="linenos">128</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Redshift.Generator.values_sql-129"><a href="#Redshift.Generator.values_sql-129"><span class="linenos">129</span></a>
</span><span id="Redshift.Generator.values_sql-130"><a href="#Redshift.Generator.values_sql-130"><span class="linenos">130</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">columns</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.values_sql-119"><a href="#Redshift.Generator.values_sql-119"><span class="linenos">119</span></a> <span class="k">def</span> <span class="nf">values_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Values</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift.Generator.values_sql-120"><a href="#Redshift.Generator.values_sql-120"><span class="linenos">120</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Redshift.Generator.values_sql-121"><a href="#Redshift.Generator.values_sql-121"><span class="linenos">121</span></a><span class="sd"> Converts `VALUES...` expression into a series of unions.</span>
</span><span id="Redshift.Generator.values_sql-122"><a href="#Redshift.Generator.values_sql-122"><span class="linenos">122</span></a>
</span><span id="Redshift.Generator.values_sql-123"><a href="#Redshift.Generator.values_sql-123"><span class="linenos">123</span></a><span class="sd"> Note: If you have a lot of unions then this will result in a large number of recursive statements to</span>
</span><span id="Redshift.Generator.values_sql-124"><a href="#Redshift.Generator.values_sql-124"><span class="linenos">124</span></a><span class="sd"> evaluate the expression. You may need to increase `sys.setrecursionlimit` to run and it can also be</span>
</span><span id="Redshift.Generator.values_sql-125"><a href="#Redshift.Generator.values_sql-125"><span class="linenos">125</span></a><span class="sd"> very slow.</span>
</span><span id="Redshift.Generator.values_sql-126"><a href="#Redshift.Generator.values_sql-126"><span class="linenos">126</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Redshift.Generator.values_sql-127"><a href="#Redshift.Generator.values_sql-127"><span class="linenos">127</span></a>
</span><span id="Redshift.Generator.values_sql-128"><a href="#Redshift.Generator.values_sql-128"><span class="linenos">128</span></a> <span class="c1"># The VALUES clause is still valid in an `INSERT INTO ..` statement, for example</span>
</span><span id="Redshift.Generator.values_sql-129"><a href="#Redshift.Generator.values_sql-129"><span class="linenos">129</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_ancestor</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">):</span>
</span><span id="Redshift.Generator.values_sql-130"><a href="#Redshift.Generator.values_sql-130"><span class="linenos">130</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">values_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Redshift.Generator.values_sql-131"><a href="#Redshift.Generator.values_sql-131"><span class="linenos">131</span></a>
</span><span id="Redshift.Generator.values_sql-132"><a href="#Redshift.Generator.values_sql-132"><span class="linenos">132</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Redshift.Generator.values_sql-133"><a href="#Redshift.Generator.values_sql-133"><span class="linenos">133</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="n">tuple_exp</span><span class="o">.</span><span class="n">expressions</span> <span class="k">for</span> <span class="n">tuple_exp</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
</span><span id="Redshift.Generator.values_sql-134"><a href="#Redshift.Generator.values_sql-134"><span class="linenos">134</span></a>
</span><span id="Redshift.Generator.values_sql-135"><a href="#Redshift.Generator.values_sql-135"><span class="linenos">135</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">rows</span><span class="p">):</span>
</span><span id="Redshift.Generator.values_sql-136"><a href="#Redshift.Generator.values_sql-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
</span><span id="Redshift.Generator.values_sql-137"><a href="#Redshift.Generator.values_sql-137"><span class="linenos">137</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
</span><span id="Redshift.Generator.values_sql-138"><a href="#Redshift.Generator.values_sql-138"><span class="linenos">138</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span>
</span><span id="Redshift.Generator.values_sql-139"><a href="#Redshift.Generator.values_sql-139"><span class="linenos">139</span></a> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
</span><span id="Redshift.Generator.values_sql-140"><a href="#Redshift.Generator.values_sql-140"><span class="linenos">140</span></a> <span class="p">]</span>
</span><span id="Redshift.Generator.values_sql-141"><a href="#Redshift.Generator.values_sql-141"><span class="linenos">141</span></a>
</span><span id="Redshift.Generator.values_sql-142"><a href="#Redshift.Generator.values_sql-142"><span class="linenos">142</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
</span><span id="Redshift.Generator.values_sql-132"><a href="#Redshift.Generator.values_sql-132"><span class="linenos">132</span></a> <span class="n">column_names</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">alias</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">&quot;alias&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">columns</span>
</span><span id="Redshift.Generator.values_sql-133"><a href="#Redshift.Generator.values_sql-133"><span class="linenos">133</span></a>
</span><span id="Redshift.Generator.values_sql-134"><a href="#Redshift.Generator.values_sql-134"><span class="linenos">134</span></a> <span class="n">selects</span> <span class="o">=</span> <span class="p">[]</span>
</span><span id="Redshift.Generator.values_sql-135"><a href="#Redshift.Generator.values_sql-135"><span class="linenos">135</span></a> <span class="n">rows</span> <span class="o">=</span> <span class="p">[</span><span class="n">tuple_exp</span><span class="o">.</span><span class="n">expressions</span> <span class="k">for</span> <span class="n">tuple_exp</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">expressions</span><span class="p">]</span>
</span><span id="Redshift.Generator.values_sql-136"><a href="#Redshift.Generator.values_sql-136"><span class="linenos">136</span></a>
</span><span id="Redshift.Generator.values_sql-137"><a href="#Redshift.Generator.values_sql-137"><span class="linenos">137</span></a> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">rows</span><span class="p">):</span>
</span><span id="Redshift.Generator.values_sql-138"><a href="#Redshift.Generator.values_sql-138"><span class="linenos">138</span></a> <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">column_names</span><span class="p">:</span>
</span><span id="Redshift.Generator.values_sql-139"><a href="#Redshift.Generator.values_sql-139"><span class="linenos">139</span></a> <span class="n">row</span> <span class="o">=</span> <span class="p">[</span>
</span><span id="Redshift.Generator.values_sql-140"><a href="#Redshift.Generator.values_sql-140"><span class="linenos">140</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">alias_</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">column_name</span><span class="p">)</span>
</span><span id="Redshift.Generator.values_sql-141"><a href="#Redshift.Generator.values_sql-141"><span class="linenos">141</span></a> <span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">column_name</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">row</span><span class="p">,</span> <span class="n">column_names</span><span class="p">)</span>
</span><span id="Redshift.Generator.values_sql-142"><a href="#Redshift.Generator.values_sql-142"><span class="linenos">142</span></a> <span class="p">]</span>
</span><span id="Redshift.Generator.values_sql-143"><a href="#Redshift.Generator.values_sql-143"><span class="linenos">143</span></a>
</span><span id="Redshift.Generator.values_sql-144"><a href="#Redshift.Generator.values_sql-144"><span class="linenos">144</span></a> <span class="n">subquery_expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="Redshift.Generator.values_sql-145"><a href="#Redshift.Generator.values_sql-145"><span class="linenos">145</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selects</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Redshift.Generator.values_sql-146"><a href="#Redshift.Generator.values_sql-146"><span class="linenos">146</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
</span><span id="Redshift.Generator.values_sql-147"><a href="#Redshift.Generator.values_sql-147"><span class="linenos">147</span></a> <span class="n">subquery_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">subquery_expression</span><span class="p">,</span> <span class="n">select</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Redshift.Generator.values_sql-148"><a href="#Redshift.Generator.values_sql-148"><span class="linenos">148</span></a>
</span><span id="Redshift.Generator.values_sql-149"><a href="#Redshift.Generator.values_sql-149"><span class="linenos">149</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">subquery_expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">))</span>
</span><span id="Redshift.Generator.values_sql-144"><a href="#Redshift.Generator.values_sql-144"><span class="linenos">144</span></a> <span class="n">selects</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">(</span><span class="n">expressions</span><span class="o">=</span><span class="n">row</span><span class="p">))</span>
</span><span id="Redshift.Generator.values_sql-145"><a href="#Redshift.Generator.values_sql-145"><span class="linenos">145</span></a>
</span><span id="Redshift.Generator.values_sql-146"><a href="#Redshift.Generator.values_sql-146"><span class="linenos">146</span></a> <span class="n">subquery_expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span> <span class="o">|</span> <span class="n">exp</span><span class="o">.</span><span class="n">Union</span> <span class="o">=</span> <span class="n">selects</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span><span id="Redshift.Generator.values_sql-147"><a href="#Redshift.Generator.values_sql-147"><span class="linenos">147</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">selects</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Redshift.Generator.values_sql-148"><a href="#Redshift.Generator.values_sql-148"><span class="linenos">148</span></a> <span class="k">for</span> <span class="n">select</span> <span class="ow">in</span> <span class="n">selects</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
</span><span id="Redshift.Generator.values_sql-149"><a href="#Redshift.Generator.values_sql-149"><span class="linenos">149</span></a> <span class="n">subquery_expression</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="n">subquery_expression</span><span class="p">,</span> <span class="n">select</span><span class="p">,</span> <span class="n">distinct</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span><span id="Redshift.Generator.values_sql-150"><a href="#Redshift.Generator.values_sql-150"><span class="linenos">150</span></a>
</span><span id="Redshift.Generator.values_sql-151"><a href="#Redshift.Generator.values_sql-151"><span class="linenos">151</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">subquery_sql</span><span class="p">(</span><span class="n">subquery_expression</span><span class="o">.</span><span class="n">subquery</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">alias</span><span class="p">))</span>
</span></pre></div>
@ -809,9 +817,9 @@ very slow.</p>
</div>
<a class="headerlink" href="#Redshift.Generator.with_properties"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.with_properties-151"><a href="#Redshift.Generator.with_properties-151"><span class="linenos">151</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift.Generator.with_properties-152"><a href="#Redshift.Generator.with_properties-152"><span class="linenos">152</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
</span><span id="Redshift.Generator.with_properties-153"><a href="#Redshift.Generator.with_properties-153"><span class="linenos">153</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.with_properties-153"><a href="#Redshift.Generator.with_properties-153"><span class="linenos">153</span></a> <span class="k">def</span> <span class="nf">with_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">properties</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift.Generator.with_properties-154"><a href="#Redshift.Generator.with_properties-154"><span class="linenos">154</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;Redshift doesn&#39;t have `WITH` as part of their with_properties so we remove it&quot;&quot;&quot;</span>
</span><span id="Redshift.Generator.with_properties-155"><a href="#Redshift.Generator.with_properties-155"><span class="linenos">155</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">properties</span><span class="p">(</span><span class="n">properties</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">suffix</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
</span></pre></div>
@ -831,22 +839,22 @@ very slow.</p>
</div>
<a class="headerlink" href="#Redshift.Generator.datatype_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.datatype_sql-155"><a href="#Redshift.Generator.datatype_sql-155"><span class="linenos">155</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift.Generator.datatype_sql-156"><a href="#Redshift.Generator.datatype_sql-156"><span class="linenos">156</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Redshift.Generator.datatype_sql-157"><a href="#Redshift.Generator.datatype_sql-157"><span class="linenos">157</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
</span><span id="Redshift.Generator.datatype_sql-158"><a href="#Redshift.Generator.datatype_sql-158"><span class="linenos">158</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
</span><span id="Redshift.Generator.datatype_sql-159"><a href="#Redshift.Generator.datatype_sql-159"><span class="linenos">159</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
</span><span id="Redshift.Generator.datatype_sql-160"><a href="#Redshift.Generator.datatype_sql-160"><span class="linenos">160</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
</span><span id="Redshift.Generator.datatype_sql-161"><a href="#Redshift.Generator.datatype_sql-161"><span class="linenos">161</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Redshift.Generator.datatype_sql-162"><a href="#Redshift.Generator.datatype_sql-162"><span class="linenos">162</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TEXT</span><span class="p">:</span>
</span><span id="Redshift.Generator.datatype_sql-163"><a href="#Redshift.Generator.datatype_sql-163"><span class="linenos">163</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="Redshift.Generator.datatype_sql-164"><a href="#Redshift.Generator.datatype_sql-164"><span class="linenos">164</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
</span><span id="Redshift.Generator.datatype_sql-165"><a href="#Redshift.Generator.datatype_sql-165"><span class="linenos">165</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
</span><span id="Redshift.Generator.datatype_sql-166"><a href="#Redshift.Generator.datatype_sql-166"><span class="linenos">166</span></a>
</span><span id="Redshift.Generator.datatype_sql-167"><a href="#Redshift.Generator.datatype_sql-167"><span class="linenos">167</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
</span><span id="Redshift.Generator.datatype_sql-168"><a href="#Redshift.Generator.datatype_sql-168"><span class="linenos">168</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
</span><span id="Redshift.Generator.datatype_sql-169"><a href="#Redshift.Generator.datatype_sql-169"><span class="linenos">169</span></a>
</span><span id="Redshift.Generator.datatype_sql-170"><a href="#Redshift.Generator.datatype_sql-170"><span class="linenos">170</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Redshift.Generator.datatype_sql-157"><a href="#Redshift.Generator.datatype_sql-157"><span class="linenos">157</span></a> <span class="k">def</span> <span class="nf">datatype_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Redshift.Generator.datatype_sql-158"><a href="#Redshift.Generator.datatype_sql-158"><span class="linenos">158</span></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
</span><span id="Redshift.Generator.datatype_sql-159"><a href="#Redshift.Generator.datatype_sql-159"><span class="linenos">159</span></a><span class="sd"> Redshift converts the `TEXT` data type to `VARCHAR(255)` by default when people more generally mean</span>
</span><span id="Redshift.Generator.datatype_sql-160"><a href="#Redshift.Generator.datatype_sql-160"><span class="linenos">160</span></a><span class="sd"> VARCHAR of max length which is `VARCHAR(max)` in Redshift. Therefore if we get a `TEXT` data type</span>
</span><span id="Redshift.Generator.datatype_sql-161"><a href="#Redshift.Generator.datatype_sql-161"><span class="linenos">161</span></a><span class="sd"> without precision we convert it to `VARCHAR(max)` and if it does have precision then we just convert</span>
</span><span id="Redshift.Generator.datatype_sql-162"><a href="#Redshift.Generator.datatype_sql-162"><span class="linenos">162</span></a><span class="sd"> `TEXT` to `VARCHAR`.</span>
</span><span id="Redshift.Generator.datatype_sql-163"><a href="#Redshift.Generator.datatype_sql-163"><span class="linenos">163</span></a><span class="sd"> &quot;&quot;&quot;</span>
</span><span id="Redshift.Generator.datatype_sql-164"><a href="#Redshift.Generator.datatype_sql-164"><span class="linenos">164</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">):</span>
</span><span id="Redshift.Generator.datatype_sql-165"><a href="#Redshift.Generator.datatype_sql-165"><span class="linenos">165</span></a> <span class="n">expression</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
</span><span id="Redshift.Generator.datatype_sql-166"><a href="#Redshift.Generator.datatype_sql-166"><span class="linenos">166</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">&quot;this&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">VARCHAR</span><span class="p">)</span>
</span><span id="Redshift.Generator.datatype_sql-167"><a href="#Redshift.Generator.datatype_sql-167"><span class="linenos">167</span></a> <span class="n">precision</span> <span class="o">=</span> <span class="n">expression</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">)</span>
</span><span id="Redshift.Generator.datatype_sql-168"><a href="#Redshift.Generator.datatype_sql-168"><span class="linenos">168</span></a>
</span><span id="Redshift.Generator.datatype_sql-169"><a href="#Redshift.Generator.datatype_sql-169"><span class="linenos">169</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">precision</span><span class="p">:</span>
</span><span id="Redshift.Generator.datatype_sql-170"><a href="#Redshift.Generator.datatype_sql-170"><span class="linenos">170</span></a> <span class="n">expression</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;expressions&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Var</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="s2">&quot;MAX&quot;</span><span class="p">))</span>
</span><span id="Redshift.Generator.datatype_sql-171"><a href="#Redshift.Generator.datatype_sql-171"><span class="linenos">171</span></a>
</span><span id="Redshift.Generator.datatype_sql-172"><a href="#Redshift.Generator.datatype_sql-172"><span class="linenos">172</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">datatype_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@ -998,7 +1006,6 @@ without precision we convert it to <code>VARCHAR(max)</code> and if it does have
<dd id="Redshift.Generator.check_sql" class="function"><a href="../generator.html#Generator.check_sql">check_sql</a></dd>
<dd id="Redshift.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
<dd id="Redshift.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
<dd id="Redshift.Generator.unique_sql" class="function"><a href="../generator.html#Generator.unique_sql">unique_sql</a></dd>
<dd id="Redshift.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
<dd id="Redshift.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="Redshift.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
@ -1091,6 +1098,9 @@ without precision we convert it to <code>VARCHAR(max)</code> and if it does have
<dd id="Redshift.Generator.when_sql" class="function"><a href="../generator.html#Generator.when_sql">when_sql</a></dd>
<dd id="Redshift.Generator.merge_sql" class="function"><a href="../generator.html#Generator.merge_sql">merge_sql</a></dd>
<dd id="Redshift.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
<dd id="Redshift.Generator.dictproperty_sql" class="function"><a href="../generator.html#Generator.dictproperty_sql">dictproperty_sql</a></dd>
<dd id="Redshift.Generator.dictrange_sql" class="function"><a href="../generator.html#Generator.dictrange_sql">dictrange_sql</a></dd>
<dd id="Redshift.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
</div>
</dl>

File diff suppressed because it is too large Load diff

View file

@ -217,7 +217,7 @@ a parsed syntax tree.</p>
<ul>
<li><strong>error_level:</strong> the desired error level.
Default: ErrorLevel.RAISE</li>
Default: ErrorLevel.IMMEDIATE</li>
<li><strong>error_message_context:</strong> determines the amount of context to capture from a
query string when displaying the error message (in number of characters).
Default: 50.</li>
@ -311,6 +311,8 @@ represents a python time format and the output the target time format</li>
Default: "upper"</li>
<li><strong>alias_post_tablesample (bool):</strong> if the table alias comes after tablesample
Default: False</li>
<li><strong>identifiers_can_start_with_digit (bool):</strong> if an unquoted identifier can start with digit
Default: False</li>
<li><strong>unsupported_level (ErrorLevel):</strong> determines the generator's behavior when it encounters
unsupported expressions. Default ErrorLevel.WARN.</li>
<li><strong>null_ordering (str):</strong> Indicates the default null ordering method to use if not explicitly set.
@ -496,7 +498,6 @@ Default: True</li>
<dd id="Spark.Generator.check_sql" class="function"><a href="../generator.html#Generator.check_sql">check_sql</a></dd>
<dd id="Spark.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
<dd id="Spark.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
<dd id="Spark.Generator.unique_sql" class="function"><a href="../generator.html#Generator.unique_sql">unique_sql</a></dd>
<dd id="Spark.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
<dd id="Spark.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="Spark.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
@ -588,6 +589,9 @@ Default: True</li>
<dd id="Spark.Generator.when_sql" class="function"><a href="../generator.html#Generator.when_sql">when_sql</a></dd>
<dd id="Spark.Generator.merge_sql" class="function"><a href="../generator.html#Generator.merge_sql">merge_sql</a></dd>
<dd id="Spark.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
<dd id="Spark.Generator.dictproperty_sql" class="function"><a href="../generator.html#Generator.dictproperty_sql">dictproperty_sql</a></dd>
<dd id="Spark.Generator.dictrange_sql" class="function"><a href="../generator.html#Generator.dictrange_sql">dictrange_sql</a></dd>
<dd id="Spark.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
</div>
<div><dt><a href="spark2.html#Spark2.Generator">sqlglot.dialects.spark2.Spark2.Generator</a></dt>

View file

@ -195,162 +195,149 @@
</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a> <span class="s2">&quot;MAP_FROM_ARRAYS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a> <span class="s2">&quot;TO_UNIX_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="s2">&quot;LEFT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a> <span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">(</span>
</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="n">length</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="p">),</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">(</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="p">),</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">(</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="p">),</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="s2">&quot;RIGHT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Sub</span><span class="p">(</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="p">),</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">length</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="p">),</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="s2">&quot;AGGREGATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">(</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="p">),</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">(</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="p">),</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">(</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="p">),</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">(</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="p">),</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">to</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">)),</span>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="p">),</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="s2">&quot;TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;boolean&quot;</span><span class="p">),</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">),</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="s2">&quot;FLOAT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">),</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="s2">&quot;INT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;int&quot;</span><span class="p">),</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="s2">&quot;STRING&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;string&quot;</span><span class="p">),</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">),</span>
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a> <span class="p">}</span>
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</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">FUNCTION_PARSERS</span><span class="p">,</span>
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="s2">&quot;BROADCAST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCAST&quot;</span><span class="p">),</span>
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">),</span>
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="s2">&quot;MAPJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MAPJOIN&quot;</span><span class="p">),</span>
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGE&quot;</span><span class="p">),</span>
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">),</span>
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">),</span>
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a> <span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">),</span>
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">),</span>
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="p">}</span>
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a>
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="k">def</span> <span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span>
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a>
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DROP&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(),</span>
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span>
</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="p">)</span>
</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a> <span class="p">),</span>
</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a> <span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">(</span>
</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a> <span class="p">),</span>
</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a> <span class="s2">&quot;AGGREGATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a> <span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">(</span>
</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a> <span class="p">),</span>
</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a> <span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">(</span>
</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a> <span class="p">),</span>
</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a> <span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">(</span>
</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="p">),</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a> <span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">(</span>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="p">),</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">to</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">)),</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a> <span class="p">),</span>
</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a> <span class="s2">&quot;TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;boolean&quot;</span><span class="p">),</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">),</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="s2">&quot;FLOAT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">),</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="s2">&quot;INT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;int&quot;</span><span class="p">),</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="s2">&quot;STRING&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;string&quot;</span><span class="p">),</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">),</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a> <span class="p">}</span>
</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a>
</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-151"><a href="#L-151"><span class="linenos">151</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">FUNCTION_PARSERS</span><span class="p">,</span>
</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a> <span class="s2">&quot;BROADCAST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCAST&quot;</span><span class="p">),</span>
</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a> <span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">),</span>
</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a> <span class="s2">&quot;MAPJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MAPJOIN&quot;</span><span class="p">),</span>
</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGE&quot;</span><span class="p">),</span>
</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a> <span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">),</span>
</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a> <span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">),</span>
</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a> <span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">),</span>
</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a> <span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">),</span>
</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a> <span class="p">}</span>
</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a>
</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a> <span class="k">def</span> <span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span>
</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a>
</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DROP&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(),</span>
</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span>
</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a> <span class="p">)</span>
</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a>
</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a> <span class="k">return</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">]</span>
</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="s2">&quot;spark&quot;</span><span class="p">)</span>
</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a>
</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;BYTE&quot;</span><span class="p">,</span>
</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;SHORT&quot;</span><span class="p">,</span>
</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;LONG&quot;</span><span class="p">,</span>
</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a> <span class="p">}</span>
</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a>
</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="k">return</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">]</span>
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="s2">&quot;spark&quot;</span><span class="p">)</span>
</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;BYTE&quot;</span><span class="p">,</span>
</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;SHORT&quot;</span><span class="p">,</span>
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;LONG&quot;</span><span class="p">,</span>
</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="p">}</span>
</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a>
</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="p">}</span>
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a>
</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">),</span>
</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;AGGREGATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, 0, (acc, x) -&gt; acc + x, acc -&gt; acc)&quot;</span><span class="p">,</span>
</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UTC_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;zone&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">),</span>
</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">),</span>
</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</span><span class="p">),</span>
</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRUNC&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">),</span>
</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">),</span>
</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">),</span>
</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unalias_pivot</span><span class="p">]),</span>
</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">_map_sql</span><span class="p">,</span>
</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unqualify_pivot_columns</span><span class="p">]),</span>
</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AGGREGATE&quot;</span><span class="p">),</span>
</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="p">),</span>
</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</span>
</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">),</span>
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="p">),</span>
</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="p">}</span>
</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">)</span>
</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArraySort</span><span class="p">)</span>
</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">)</span>
</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a>
</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a>
</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span>
</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="p">):</span>
</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;FROM_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span><span class="p">):</span>
</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TO_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a>
</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a>
</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a> <span class="n">expression</span><span class="p">,</span>
</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">)</span>
</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a> <span class="p">)</span>
</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a>
</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;X&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a> <span class="p">}</span>
</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a>
</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">),</span>
</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;AGGREGATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, 0, (acc, x) -&gt; acc + x, acc -&gt; acc)&quot;</span><span class="p">,</span>
</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UTC_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;zone&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">),</span>
</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">),</span>
</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</span><span class="p">),</span>
</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRUNC&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">),</span>
</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">),</span>
</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">),</span>
</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unalias_pivot</span><span class="p">]),</span>
</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">_map_sql</span><span class="p">,</span>
</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unqualify_pivot_columns</span><span class="p">]),</span>
</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AGGREGATE&quot;</span><span class="p">),</span>
</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a> <span class="p">),</span>
</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</span>
</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">),</span>
</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a> <span class="p">),</span>
</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a> <span class="p">}</span>
</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">)</span>
</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArraySort</span><span class="p">)</span>
</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">)</span>
</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span>
</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">)</span>
</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a>
</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a>
</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">):</span>
</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;FROM_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">):</span>
</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TO_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a>
</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a>
</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a> <span class="n">expression</span><span class="p">,</span>
</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;struct&quot;</span><span class="p">)</span>
</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a> <span class="p">)</span>
</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a>
</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;X&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
</span></pre></div>
@ -372,162 +359,149 @@
</span><span id="Spark2-111"><a href="#Spark2-111"><span class="linenos">111</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
</span><span id="Spark2-112"><a href="#Spark2-112"><span class="linenos">112</span></a> <span class="s2">&quot;MAP_FROM_ARRAYS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2-113"><a href="#Spark2-113"><span class="linenos">113</span></a> <span class="s2">&quot;TO_UNIX_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2-114"><a href="#Spark2-114"><span class="linenos">114</span></a> <span class="s2">&quot;LEFT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
</span><span id="Spark2-114"><a href="#Spark2-114"><span class="linenos">114</span></a> <span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">(</span>
</span><span id="Spark2-115"><a href="#Spark2-115"><span class="linenos">115</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="Spark2-116"><a href="#Spark2-116"><span class="linenos">116</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2-117"><a href="#Spark2-117"><span class="linenos">117</span></a> <span class="n">length</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2-118"><a href="#Spark2-118"><span class="linenos">118</span></a> <span class="p">),</span>
</span><span id="Spark2-119"><a href="#Spark2-119"><span class="linenos">119</span></a> <span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">(</span>
</span><span id="Spark2-120"><a href="#Spark2-120"><span class="linenos">120</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="Spark2-121"><a href="#Spark2-121"><span class="linenos">121</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2-122"><a href="#Spark2-122"><span class="linenos">122</span></a> <span class="p">),</span>
</span><span id="Spark2-123"><a href="#Spark2-123"><span class="linenos">123</span></a> <span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">(</span>
</span><span id="Spark2-124"><a href="#Spark2-124"><span class="linenos">124</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="Spark2-125"><a href="#Spark2-125"><span class="linenos">125</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2-126"><a href="#Spark2-126"><span class="linenos">126</span></a> <span class="p">),</span>
</span><span id="Spark2-127"><a href="#Spark2-127"><span class="linenos">127</span></a> <span class="s2">&quot;RIGHT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
</span><span id="Spark2-128"><a href="#Spark2-128"><span class="linenos">128</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="Spark2-129"><a href="#Spark2-129"><span class="linenos">129</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Sub</span><span class="p">(</span>
</span><span id="Spark2-130"><a href="#Spark2-130"><span class="linenos">130</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2-131"><a href="#Spark2-131"><span class="linenos">131</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span>
</span><span id="Spark2-132"><a href="#Spark2-132"><span class="linenos">132</span></a> <span class="p">),</span>
</span><span id="Spark2-133"><a href="#Spark2-133"><span class="linenos">133</span></a> <span class="n">length</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2-134"><a href="#Spark2-134"><span class="linenos">134</span></a> <span class="p">),</span>
</span><span id="Spark2-135"><a href="#Spark2-135"><span class="linenos">135</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2-136"><a href="#Spark2-136"><span class="linenos">136</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2-137"><a href="#Spark2-137"><span class="linenos">137</span></a> <span class="s2">&quot;AGGREGATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2-138"><a href="#Spark2-138"><span class="linenos">138</span></a> <span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">(</span>
</span><span id="Spark2-139"><a href="#Spark2-139"><span class="linenos">139</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2-140"><a href="#Spark2-140"><span class="linenos">140</span></a> <span class="p">),</span>
</span><span id="Spark2-141"><a href="#Spark2-141"><span class="linenos">141</span></a> <span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">(</span>
</span><span id="Spark2-142"><a href="#Spark2-142"><span class="linenos">142</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2-143"><a href="#Spark2-143"><span class="linenos">143</span></a> <span class="p">),</span>
</span><span id="Spark2-144"><a href="#Spark2-144"><span class="linenos">144</span></a> <span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">(</span>
</span><span id="Spark2-145"><a href="#Spark2-145"><span class="linenos">145</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2-146"><a href="#Spark2-146"><span class="linenos">146</span></a> <span class="p">),</span>
</span><span id="Spark2-147"><a href="#Spark2-147"><span class="linenos">147</span></a> <span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">(</span>
</span><span id="Spark2-148"><a href="#Spark2-148"><span class="linenos">148</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2-149"><a href="#Spark2-149"><span class="linenos">149</span></a> <span class="p">),</span>
</span><span id="Spark2-150"><a href="#Spark2-150"><span class="linenos">150</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">to</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">)),</span>
</span><span id="Spark2-151"><a href="#Spark2-151"><span class="linenos">151</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
</span><span id="Spark2-152"><a href="#Spark2-152"><span class="linenos">152</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2-153"><a href="#Spark2-153"><span class="linenos">153</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2-154"><a href="#Spark2-154"><span class="linenos">154</span></a> <span class="p">),</span>
</span><span id="Spark2-155"><a href="#Spark2-155"><span class="linenos">155</span></a> <span class="s2">&quot;TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2-156"><a href="#Spark2-156"><span class="linenos">156</span></a> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;boolean&quot;</span><span class="p">),</span>
</span><span id="Spark2-157"><a href="#Spark2-157"><span class="linenos">157</span></a> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">),</span>
</span><span id="Spark2-158"><a href="#Spark2-158"><span class="linenos">158</span></a> <span class="s2">&quot;FLOAT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">),</span>
</span><span id="Spark2-159"><a href="#Spark2-159"><span class="linenos">159</span></a> <span class="s2">&quot;INT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;int&quot;</span><span class="p">),</span>
</span><span id="Spark2-160"><a href="#Spark2-160"><span class="linenos">160</span></a> <span class="s2">&quot;STRING&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;string&quot;</span><span class="p">),</span>
</span><span id="Spark2-161"><a href="#Spark2-161"><span class="linenos">161</span></a> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">),</span>
</span><span id="Spark2-162"><a href="#Spark2-162"><span class="linenos">162</span></a> <span class="p">}</span>
</span><span id="Spark2-163"><a href="#Spark2-163"><span class="linenos">163</span></a>
</span><span id="Spark2-164"><a href="#Spark2-164"><span class="linenos">164</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2-165"><a href="#Spark2-165"><span class="linenos">165</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">FUNCTION_PARSERS</span><span class="p">,</span>
</span><span id="Spark2-166"><a href="#Spark2-166"><span class="linenos">166</span></a> <span class="s2">&quot;BROADCAST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCAST&quot;</span><span class="p">),</span>
</span><span id="Spark2-167"><a href="#Spark2-167"><span class="linenos">167</span></a> <span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">),</span>
</span><span id="Spark2-168"><a href="#Spark2-168"><span class="linenos">168</span></a> <span class="s2">&quot;MAPJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MAPJOIN&quot;</span><span class="p">),</span>
</span><span id="Spark2-169"><a href="#Spark2-169"><span class="linenos">169</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGE&quot;</span><span class="p">),</span>
</span><span id="Spark2-170"><a href="#Spark2-170"><span class="linenos">170</span></a> <span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">),</span>
</span><span id="Spark2-171"><a href="#Spark2-171"><span class="linenos">171</span></a> <span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">),</span>
</span><span id="Spark2-172"><a href="#Spark2-172"><span class="linenos">172</span></a> <span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">),</span>
</span><span id="Spark2-173"><a href="#Spark2-173"><span class="linenos">173</span></a> <span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">),</span>
</span><span id="Spark2-174"><a href="#Spark2-174"><span class="linenos">174</span></a> <span class="p">}</span>
</span><span id="Spark2-175"><a href="#Spark2-175"><span class="linenos">175</span></a>
</span><span id="Spark2-176"><a href="#Spark2-176"><span class="linenos">176</span></a> <span class="k">def</span> <span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Spark2-177"><a href="#Spark2-177"><span class="linenos">177</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span>
</span><span id="Spark2-178"><a href="#Spark2-178"><span class="linenos">178</span></a>
</span><span id="Spark2-179"><a href="#Spark2-179"><span class="linenos">179</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Spark2-180"><a href="#Spark2-180"><span class="linenos">180</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DROP&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Spark2-181"><a href="#Spark2-181"><span class="linenos">181</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
</span><span id="Spark2-182"><a href="#Spark2-182"><span class="linenos">182</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(),</span>
</span><span id="Spark2-183"><a href="#Spark2-183"><span class="linenos">183</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span>
</span><span id="Spark2-184"><a href="#Spark2-184"><span class="linenos">184</span></a> <span class="p">)</span>
</span><span id="Spark2-116"><a href="#Spark2-116"><span class="linenos">116</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2-117"><a href="#Spark2-117"><span class="linenos">117</span></a> <span class="p">),</span>
</span><span id="Spark2-118"><a href="#Spark2-118"><span class="linenos">118</span></a> <span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">(</span>
</span><span id="Spark2-119"><a href="#Spark2-119"><span class="linenos">119</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="Spark2-120"><a href="#Spark2-120"><span class="linenos">120</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2-121"><a href="#Spark2-121"><span class="linenos">121</span></a> <span class="p">),</span>
</span><span id="Spark2-122"><a href="#Spark2-122"><span class="linenos">122</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2-123"><a href="#Spark2-123"><span class="linenos">123</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2-124"><a href="#Spark2-124"><span class="linenos">124</span></a> <span class="s2">&quot;AGGREGATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2-125"><a href="#Spark2-125"><span class="linenos">125</span></a> <span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">(</span>
</span><span id="Spark2-126"><a href="#Spark2-126"><span class="linenos">126</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2-127"><a href="#Spark2-127"><span class="linenos">127</span></a> <span class="p">),</span>
</span><span id="Spark2-128"><a href="#Spark2-128"><span class="linenos">128</span></a> <span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">(</span>
</span><span id="Spark2-129"><a href="#Spark2-129"><span class="linenos">129</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2-130"><a href="#Spark2-130"><span class="linenos">130</span></a> <span class="p">),</span>
</span><span id="Spark2-131"><a href="#Spark2-131"><span class="linenos">131</span></a> <span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">(</span>
</span><span id="Spark2-132"><a href="#Spark2-132"><span class="linenos">132</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2-133"><a href="#Spark2-133"><span class="linenos">133</span></a> <span class="p">),</span>
</span><span id="Spark2-134"><a href="#Spark2-134"><span class="linenos">134</span></a> <span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">(</span>
</span><span id="Spark2-135"><a href="#Spark2-135"><span class="linenos">135</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2-136"><a href="#Spark2-136"><span class="linenos">136</span></a> <span class="p">),</span>
</span><span id="Spark2-137"><a href="#Spark2-137"><span class="linenos">137</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">to</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">)),</span>
</span><span id="Spark2-138"><a href="#Spark2-138"><span class="linenos">138</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
</span><span id="Spark2-139"><a href="#Spark2-139"><span class="linenos">139</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2-140"><a href="#Spark2-140"><span class="linenos">140</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2-141"><a href="#Spark2-141"><span class="linenos">141</span></a> <span class="p">),</span>
</span><span id="Spark2-142"><a href="#Spark2-142"><span class="linenos">142</span></a> <span class="s2">&quot;TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2-143"><a href="#Spark2-143"><span class="linenos">143</span></a> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;boolean&quot;</span><span class="p">),</span>
</span><span id="Spark2-144"><a href="#Spark2-144"><span class="linenos">144</span></a> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">),</span>
</span><span id="Spark2-145"><a href="#Spark2-145"><span class="linenos">145</span></a> <span class="s2">&quot;FLOAT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">),</span>
</span><span id="Spark2-146"><a href="#Spark2-146"><span class="linenos">146</span></a> <span class="s2">&quot;INT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;int&quot;</span><span class="p">),</span>
</span><span id="Spark2-147"><a href="#Spark2-147"><span class="linenos">147</span></a> <span class="s2">&quot;STRING&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;string&quot;</span><span class="p">),</span>
</span><span id="Spark2-148"><a href="#Spark2-148"><span class="linenos">148</span></a> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">),</span>
</span><span id="Spark2-149"><a href="#Spark2-149"><span class="linenos">149</span></a> <span class="p">}</span>
</span><span id="Spark2-150"><a href="#Spark2-150"><span class="linenos">150</span></a>
</span><span id="Spark2-151"><a href="#Spark2-151"><span class="linenos">151</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2-152"><a href="#Spark2-152"><span class="linenos">152</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">FUNCTION_PARSERS</span><span class="p">,</span>
</span><span id="Spark2-153"><a href="#Spark2-153"><span class="linenos">153</span></a> <span class="s2">&quot;BROADCAST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCAST&quot;</span><span class="p">),</span>
</span><span id="Spark2-154"><a href="#Spark2-154"><span class="linenos">154</span></a> <span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">),</span>
</span><span id="Spark2-155"><a href="#Spark2-155"><span class="linenos">155</span></a> <span class="s2">&quot;MAPJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MAPJOIN&quot;</span><span class="p">),</span>
</span><span id="Spark2-156"><a href="#Spark2-156"><span class="linenos">156</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGE&quot;</span><span class="p">),</span>
</span><span id="Spark2-157"><a href="#Spark2-157"><span class="linenos">157</span></a> <span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">),</span>
</span><span id="Spark2-158"><a href="#Spark2-158"><span class="linenos">158</span></a> <span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">),</span>
</span><span id="Spark2-159"><a href="#Spark2-159"><span class="linenos">159</span></a> <span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">),</span>
</span><span id="Spark2-160"><a href="#Spark2-160"><span class="linenos">160</span></a> <span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">),</span>
</span><span id="Spark2-161"><a href="#Spark2-161"><span class="linenos">161</span></a> <span class="p">}</span>
</span><span id="Spark2-162"><a href="#Spark2-162"><span class="linenos">162</span></a>
</span><span id="Spark2-163"><a href="#Spark2-163"><span class="linenos">163</span></a> <span class="k">def</span> <span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Spark2-164"><a href="#Spark2-164"><span class="linenos">164</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span>
</span><span id="Spark2-165"><a href="#Spark2-165"><span class="linenos">165</span></a>
</span><span id="Spark2-166"><a href="#Spark2-166"><span class="linenos">166</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Spark2-167"><a href="#Spark2-167"><span class="linenos">167</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DROP&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Spark2-168"><a href="#Spark2-168"><span class="linenos">168</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
</span><span id="Spark2-169"><a href="#Spark2-169"><span class="linenos">169</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(),</span>
</span><span id="Spark2-170"><a href="#Spark2-170"><span class="linenos">170</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span>
</span><span id="Spark2-171"><a href="#Spark2-171"><span class="linenos">171</span></a> <span class="p">)</span>
</span><span id="Spark2-172"><a href="#Spark2-172"><span class="linenos">172</span></a>
</span><span id="Spark2-173"><a href="#Spark2-173"><span class="linenos">173</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
</span><span id="Spark2-174"><a href="#Spark2-174"><span class="linenos">174</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Spark2-175"><a href="#Spark2-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">]</span>
</span><span id="Spark2-176"><a href="#Spark2-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="s2">&quot;spark&quot;</span><span class="p">)</span>
</span><span id="Spark2-177"><a href="#Spark2-177"><span class="linenos">177</span></a>
</span><span id="Spark2-178"><a href="#Spark2-178"><span class="linenos">178</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Spark2-179"><a href="#Spark2-179"><span class="linenos">179</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2-180"><a href="#Spark2-180"><span class="linenos">180</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
</span><span id="Spark2-181"><a href="#Spark2-181"><span class="linenos">181</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;BYTE&quot;</span><span class="p">,</span>
</span><span id="Spark2-182"><a href="#Spark2-182"><span class="linenos">182</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;SHORT&quot;</span><span class="p">,</span>
</span><span id="Spark2-183"><a href="#Spark2-183"><span class="linenos">183</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;LONG&quot;</span><span class="p">,</span>
</span><span id="Spark2-184"><a href="#Spark2-184"><span class="linenos">184</span></a> <span class="p">}</span>
</span><span id="Spark2-185"><a href="#Spark2-185"><span class="linenos">185</span></a>
</span><span id="Spark2-186"><a href="#Spark2-186"><span class="linenos">186</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
</span><span id="Spark2-187"><a href="#Spark2-187"><span class="linenos">187</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Spark2-188"><a href="#Spark2-188"><span class="linenos">188</span></a> <span class="k">return</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">]</span>
</span><span id="Spark2-189"><a href="#Spark2-189"><span class="linenos">189</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="s2">&quot;spark&quot;</span><span class="p">)</span>
</span><span id="Spark2-190"><a href="#Spark2-190"><span class="linenos">190</span></a>
</span><span id="Spark2-191"><a href="#Spark2-191"><span class="linenos">191</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Spark2-192"><a href="#Spark2-192"><span class="linenos">192</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2-193"><a href="#Spark2-193"><span class="linenos">193</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
</span><span id="Spark2-194"><a href="#Spark2-194"><span class="linenos">194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;BYTE&quot;</span><span class="p">,</span>
</span><span id="Spark2-195"><a href="#Spark2-195"><span class="linenos">195</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;SHORT&quot;</span><span class="p">,</span>
</span><span id="Spark2-196"><a href="#Spark2-196"><span class="linenos">196</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;LONG&quot;</span><span class="p">,</span>
</span><span id="Spark2-197"><a href="#Spark2-197"><span class="linenos">197</span></a> <span class="p">}</span>
</span><span id="Spark2-198"><a href="#Spark2-198"><span class="linenos">198</span></a>
</span><span id="Spark2-199"><a href="#Spark2-199"><span class="linenos">199</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2-200"><a href="#Spark2-200"><span class="linenos">200</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
</span><span id="Spark2-201"><a href="#Spark2-201"><span class="linenos">201</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2-202"><a href="#Spark2-202"><span class="linenos">202</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2-203"><a href="#Spark2-203"><span class="linenos">203</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2-204"><a href="#Spark2-204"><span class="linenos">204</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2-205"><a href="#Spark2-205"><span class="linenos">205</span></a> <span class="p">}</span>
</span><span id="Spark2-206"><a href="#Spark2-206"><span class="linenos">206</span></a>
</span><span id="Spark2-207"><a href="#Spark2-207"><span class="linenos">207</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2-208"><a href="#Spark2-208"><span class="linenos">208</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><span id="Spark2-209"><a href="#Spark2-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">),</span>
</span><span id="Spark2-210"><a href="#Spark2-210"><span class="linenos">210</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;AGGREGATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, 0, (acc, x) -&gt; acc + x, acc -&gt; acc)&quot;</span><span class="p">,</span>
</span><span id="Spark2-211"><a href="#Spark2-211"><span class="linenos">211</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UTC_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;zone&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Spark2-212"><a href="#Spark2-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">),</span>
</span><span id="Spark2-213"><a href="#Spark2-213"><span class="linenos">213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">),</span>
</span><span id="Spark2-214"><a href="#Spark2-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
</span><span id="Spark2-215"><a href="#Spark2-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</span><span class="p">),</span>
</span><span id="Spark2-216"><a href="#Spark2-216"><span class="linenos">216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRUNC&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
</span><span id="Spark2-217"><a href="#Spark2-217"><span class="linenos">217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">),</span>
</span><span id="Spark2-218"><a href="#Spark2-218"><span class="linenos">218</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">),</span>
</span><span id="Spark2-219"><a href="#Spark2-219"><span class="linenos">219</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">),</span>
</span><span id="Spark2-220"><a href="#Spark2-220"><span class="linenos">220</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Spark2-221"><a href="#Spark2-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unalias_pivot</span><span class="p">]),</span>
</span><span id="Spark2-222"><a href="#Spark2-222"><span class="linenos">222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
</span><span id="Spark2-223"><a href="#Spark2-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
</span><span id="Spark2-224"><a href="#Spark2-224"><span class="linenos">224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
</span><span id="Spark2-225"><a href="#Spark2-225"><span class="linenos">225</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">_map_sql</span><span class="p">,</span>
</span><span id="Spark2-226"><a href="#Spark2-226"><span class="linenos">226</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unqualify_pivot_columns</span><span class="p">]),</span>
</span><span id="Spark2-227"><a href="#Spark2-227"><span class="linenos">227</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AGGREGATE&quot;</span><span class="p">),</span>
</span><span id="Spark2-228"><a href="#Spark2-228"><span class="linenos">228</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
</span><span id="Spark2-229"><a href="#Spark2-229"><span class="linenos">229</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Spark2-230"><a href="#Spark2-230"><span class="linenos">230</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="Spark2-231"><a href="#Spark2-231"><span class="linenos">231</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="Spark2-232"><a href="#Spark2-232"><span class="linenos">232</span></a> <span class="p">),</span>
</span><span id="Spark2-233"><a href="#Spark2-233"><span class="linenos">233</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
</span><span id="Spark2-234"><a href="#Spark2-234"><span class="linenos">234</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</span>
</span><span id="Spark2-235"><a href="#Spark2-235"><span class="linenos">235</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
</span><span id="Spark2-236"><a href="#Spark2-236"><span class="linenos">236</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">),</span>
</span><span id="Spark2-237"><a href="#Spark2-237"><span class="linenos">237</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
</span><span id="Spark2-238"><a href="#Spark2-238"><span class="linenos">238</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
</span><span id="Spark2-239"><a href="#Spark2-239"><span class="linenos">239</span></a> <span class="p">),</span>
</span><span id="Spark2-240"><a href="#Spark2-240"><span class="linenos">240</span></a> <span class="p">}</span>
</span><span id="Spark2-241"><a href="#Spark2-241"><span class="linenos">241</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">)</span>
</span><span id="Spark2-242"><a href="#Spark2-242"><span class="linenos">242</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArraySort</span><span class="p">)</span>
</span><span id="Spark2-243"><a href="#Spark2-243"><span class="linenos">243</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">)</span>
</span><span id="Spark2-244"><a href="#Spark2-244"><span class="linenos">244</span></a>
</span><span id="Spark2-245"><a href="#Spark2-245"><span class="linenos">245</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Spark2-246"><a href="#Spark2-246"><span class="linenos">246</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Spark2-247"><a href="#Spark2-247"><span class="linenos">247</span></a>
</span><span id="Spark2-248"><a href="#Spark2-248"><span class="linenos">248</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Spark2-249"><a href="#Spark2-249"><span class="linenos">249</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span>
</span><span id="Spark2-250"><a href="#Spark2-250"><span class="linenos">250</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span>
</span><span id="Spark2-251"><a href="#Spark2-251"><span class="linenos">251</span></a> <span class="p">):</span>
</span><span id="Spark2-252"><a href="#Spark2-252"><span class="linenos">252</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
</span><span id="Spark2-253"><a href="#Spark2-253"><span class="linenos">253</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;FROM_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
</span><span id="Spark2-254"><a href="#Spark2-254"><span class="linenos">254</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span><span class="p">):</span>
</span><span id="Spark2-255"><a href="#Spark2-255"><span class="linenos">255</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TO_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="Spark2-256"><a href="#Spark2-256"><span class="linenos">256</span></a>
</span><span id="Spark2-257"><a href="#Spark2-257"><span class="linenos">257</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Spark2-258"><a href="#Spark2-258"><span class="linenos">258</span></a>
</span><span id="Spark2-259"><a href="#Spark2-259"><span class="linenos">259</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Spark2-260"><a href="#Spark2-260"><span class="linenos">260</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
</span><span id="Spark2-261"><a href="#Spark2-261"><span class="linenos">261</span></a> <span class="n">expression</span><span class="p">,</span>
</span><span id="Spark2-262"><a href="#Spark2-262"><span class="linenos">262</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
</span><span id="Spark2-263"><a href="#Spark2-263"><span class="linenos">263</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
</span><span id="Spark2-264"><a href="#Spark2-264"><span class="linenos">264</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">)</span>
</span><span id="Spark2-265"><a href="#Spark2-265"><span class="linenos">265</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
</span><span id="Spark2-266"><a href="#Spark2-266"><span class="linenos">266</span></a> <span class="p">)</span>
</span><span id="Spark2-267"><a href="#Spark2-267"><span class="linenos">267</span></a>
</span><span id="Spark2-268"><a href="#Spark2-268"><span class="linenos">268</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Spark2-269"><a href="#Spark2-269"><span class="linenos">269</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;X&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
</span><span id="Spark2-186"><a href="#Spark2-186"><span class="linenos">186</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2-187"><a href="#Spark2-187"><span class="linenos">187</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
</span><span id="Spark2-188"><a href="#Spark2-188"><span class="linenos">188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2-189"><a href="#Spark2-189"><span class="linenos">189</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2-190"><a href="#Spark2-190"><span class="linenos">190</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2-191"><a href="#Spark2-191"><span class="linenos">191</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2-192"><a href="#Spark2-192"><span class="linenos">192</span></a> <span class="p">}</span>
</span><span id="Spark2-193"><a href="#Spark2-193"><span class="linenos">193</span></a>
</span><span id="Spark2-194"><a href="#Spark2-194"><span class="linenos">194</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2-195"><a href="#Spark2-195"><span class="linenos">195</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><span id="Spark2-196"><a href="#Spark2-196"><span class="linenos">196</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">),</span>
</span><span id="Spark2-197"><a href="#Spark2-197"><span class="linenos">197</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;AGGREGATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, 0, (acc, x) -&gt; acc + x, acc -&gt; acc)&quot;</span><span class="p">,</span>
</span><span id="Spark2-198"><a href="#Spark2-198"><span class="linenos">198</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UTC_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;zone&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Spark2-199"><a href="#Spark2-199"><span class="linenos">199</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">),</span>
</span><span id="Spark2-200"><a href="#Spark2-200"><span class="linenos">200</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">),</span>
</span><span id="Spark2-201"><a href="#Spark2-201"><span class="linenos">201</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
</span><span id="Spark2-202"><a href="#Spark2-202"><span class="linenos">202</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</span><span class="p">),</span>
</span><span id="Spark2-203"><a href="#Spark2-203"><span class="linenos">203</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRUNC&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
</span><span id="Spark2-204"><a href="#Spark2-204"><span class="linenos">204</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">),</span>
</span><span id="Spark2-205"><a href="#Spark2-205"><span class="linenos">205</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">),</span>
</span><span id="Spark2-206"><a href="#Spark2-206"><span class="linenos">206</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">),</span>
</span><span id="Spark2-207"><a href="#Spark2-207"><span class="linenos">207</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Spark2-208"><a href="#Spark2-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unalias_pivot</span><span class="p">]),</span>
</span><span id="Spark2-209"><a href="#Spark2-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
</span><span id="Spark2-210"><a href="#Spark2-210"><span class="linenos">210</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
</span><span id="Spark2-211"><a href="#Spark2-211"><span class="linenos">211</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
</span><span id="Spark2-212"><a href="#Spark2-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">_map_sql</span><span class="p">,</span>
</span><span id="Spark2-213"><a href="#Spark2-213"><span class="linenos">213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unqualify_pivot_columns</span><span class="p">]),</span>
</span><span id="Spark2-214"><a href="#Spark2-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AGGREGATE&quot;</span><span class="p">),</span>
</span><span id="Spark2-215"><a href="#Spark2-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
</span><span id="Spark2-216"><a href="#Spark2-216"><span class="linenos">216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Spark2-217"><a href="#Spark2-217"><span class="linenos">217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="Spark2-218"><a href="#Spark2-218"><span class="linenos">218</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="Spark2-219"><a href="#Spark2-219"><span class="linenos">219</span></a> <span class="p">),</span>
</span><span id="Spark2-220"><a href="#Spark2-220"><span class="linenos">220</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
</span><span id="Spark2-221"><a href="#Spark2-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</span>
</span><span id="Spark2-222"><a href="#Spark2-222"><span class="linenos">222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
</span><span id="Spark2-223"><a href="#Spark2-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">),</span>
</span><span id="Spark2-224"><a href="#Spark2-224"><span class="linenos">224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
</span><span id="Spark2-225"><a href="#Spark2-225"><span class="linenos">225</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
</span><span id="Spark2-226"><a href="#Spark2-226"><span class="linenos">226</span></a> <span class="p">),</span>
</span><span id="Spark2-227"><a href="#Spark2-227"><span class="linenos">227</span></a> <span class="p">}</span>
</span><span id="Spark2-228"><a href="#Spark2-228"><span class="linenos">228</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">)</span>
</span><span id="Spark2-229"><a href="#Spark2-229"><span class="linenos">229</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArraySort</span><span class="p">)</span>
</span><span id="Spark2-230"><a href="#Spark2-230"><span class="linenos">230</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">)</span>
</span><span id="Spark2-231"><a href="#Spark2-231"><span class="linenos">231</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span>
</span><span id="Spark2-232"><a href="#Spark2-232"><span class="linenos">232</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">)</span>
</span><span id="Spark2-233"><a href="#Spark2-233"><span class="linenos">233</span></a>
</span><span id="Spark2-234"><a href="#Spark2-234"><span class="linenos">234</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Spark2-235"><a href="#Spark2-235"><span class="linenos">235</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Spark2-236"><a href="#Spark2-236"><span class="linenos">236</span></a>
</span><span id="Spark2-237"><a href="#Spark2-237"><span class="linenos">237</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Spark2-238"><a href="#Spark2-238"><span class="linenos">238</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">):</span>
</span><span id="Spark2-239"><a href="#Spark2-239"><span class="linenos">239</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
</span><span id="Spark2-240"><a href="#Spark2-240"><span class="linenos">240</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;FROM_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
</span><span id="Spark2-241"><a href="#Spark2-241"><span class="linenos">241</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">):</span>
</span><span id="Spark2-242"><a href="#Spark2-242"><span class="linenos">242</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TO_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="Spark2-243"><a href="#Spark2-243"><span class="linenos">243</span></a>
</span><span id="Spark2-244"><a href="#Spark2-244"><span class="linenos">244</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Spark2-245"><a href="#Spark2-245"><span class="linenos">245</span></a>
</span><span id="Spark2-246"><a href="#Spark2-246"><span class="linenos">246</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Spark2-247"><a href="#Spark2-247"><span class="linenos">247</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
</span><span id="Spark2-248"><a href="#Spark2-248"><span class="linenos">248</span></a> <span class="n">expression</span><span class="p">,</span>
</span><span id="Spark2-249"><a href="#Spark2-249"><span class="linenos">249</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
</span><span id="Spark2-250"><a href="#Spark2-250"><span class="linenos">250</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
</span><span id="Spark2-251"><a href="#Spark2-251"><span class="linenos">251</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;struct&quot;</span><span class="p">)</span>
</span><span id="Spark2-252"><a href="#Spark2-252"><span class="linenos">252</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
</span><span id="Spark2-253"><a href="#Spark2-253"><span class="linenos">253</span></a> <span class="p">)</span>
</span><span id="Spark2-254"><a href="#Spark2-254"><span class="linenos">254</span></a>
</span><span id="Spark2-255"><a href="#Spark2-255"><span class="linenos">255</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Spark2-256"><a href="#Spark2-256"><span class="linenos">256</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;X&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
</span></pre></div>
@ -567,82 +541,69 @@
</span><span id="Spark2.Parser-111"><a href="#Spark2.Parser-111"><span class="linenos">111</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Parser</span><span class="o">.</span><span class="n">FUNCTIONS</span><span class="p">,</span>
</span><span id="Spark2.Parser-112"><a href="#Spark2.Parser-112"><span class="linenos">112</span></a> <span class="s2">&quot;MAP_FROM_ARRAYS&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2.Parser-113"><a href="#Spark2.Parser-113"><span class="linenos">113</span></a> <span class="s2">&quot;TO_UNIX_TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">StrToUnix</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2.Parser-114"><a href="#Spark2.Parser-114"><span class="linenos">114</span></a> <span class="s2">&quot;LEFT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
</span><span id="Spark2.Parser-114"><a href="#Spark2.Parser-114"><span class="linenos">114</span></a> <span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">(</span>
</span><span id="Spark2.Parser-115"><a href="#Spark2.Parser-115"><span class="linenos">115</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="Spark2.Parser-116"><a href="#Spark2.Parser-116"><span class="linenos">116</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2.Parser-117"><a href="#Spark2.Parser-117"><span class="linenos">117</span></a> <span class="n">length</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2.Parser-118"><a href="#Spark2.Parser-118"><span class="linenos">118</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-119"><a href="#Spark2.Parser-119"><span class="linenos">119</span></a> <span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">(</span>
</span><span id="Spark2.Parser-120"><a href="#Spark2.Parser-120"><span class="linenos">120</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="Spark2.Parser-121"><a href="#Spark2.Parser-121"><span class="linenos">121</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2.Parser-122"><a href="#Spark2.Parser-122"><span class="linenos">122</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-123"><a href="#Spark2.Parser-123"><span class="linenos">123</span></a> <span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">(</span>
</span><span id="Spark2.Parser-124"><a href="#Spark2.Parser-124"><span class="linenos">124</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="Spark2.Parser-125"><a href="#Spark2.Parser-125"><span class="linenos">125</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2.Parser-126"><a href="#Spark2.Parser-126"><span class="linenos">126</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-127"><a href="#Spark2.Parser-127"><span class="linenos">127</span></a> <span class="s2">&quot;RIGHT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Substring</span><span class="p">(</span>
</span><span id="Spark2.Parser-128"><a href="#Spark2.Parser-128"><span class="linenos">128</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="Spark2.Parser-129"><a href="#Spark2.Parser-129"><span class="linenos">129</span></a> <span class="n">start</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Sub</span><span class="p">(</span>
</span><span id="Spark2.Parser-130"><a href="#Spark2.Parser-130"><span class="linenos">130</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Length</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2.Parser-131"><a href="#Spark2.Parser-131"><span class="linenos">131</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Add</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">expression</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">number</span><span class="p">(</span><span class="mi">1</span><span class="p">)),</span>
</span><span id="Spark2.Parser-132"><a href="#Spark2.Parser-132"><span class="linenos">132</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-133"><a href="#Spark2.Parser-133"><span class="linenos">133</span></a> <span class="n">length</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2.Parser-134"><a href="#Spark2.Parser-134"><span class="linenos">134</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-135"><a href="#Spark2.Parser-135"><span class="linenos">135</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2.Parser-136"><a href="#Spark2.Parser-136"><span class="linenos">136</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2.Parser-137"><a href="#Spark2.Parser-137"><span class="linenos">137</span></a> <span class="s2">&quot;AGGREGATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2.Parser-138"><a href="#Spark2.Parser-138"><span class="linenos">138</span></a> <span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">(</span>
</span><span id="Spark2.Parser-139"><a href="#Spark2.Parser-139"><span class="linenos">139</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2.Parser-140"><a href="#Spark2.Parser-140"><span class="linenos">140</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-141"><a href="#Spark2.Parser-141"><span class="linenos">141</span></a> <span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">(</span>
</span><span id="Spark2.Parser-142"><a href="#Spark2.Parser-142"><span class="linenos">142</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2.Parser-143"><a href="#Spark2.Parser-143"><span class="linenos">143</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-144"><a href="#Spark2.Parser-144"><span class="linenos">144</span></a> <span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">(</span>
</span><span id="Spark2.Parser-145"><a href="#Spark2.Parser-145"><span class="linenos">145</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2.Parser-146"><a href="#Spark2.Parser-146"><span class="linenos">146</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-147"><a href="#Spark2.Parser-147"><span class="linenos">147</span></a> <span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">(</span>
</span><span id="Spark2.Parser-148"><a href="#Spark2.Parser-148"><span class="linenos">148</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2.Parser-149"><a href="#Spark2.Parser-149"><span class="linenos">149</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-150"><a href="#Spark2.Parser-150"><span class="linenos">150</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">to</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">)),</span>
</span><span id="Spark2.Parser-151"><a href="#Spark2.Parser-151"><span class="linenos">151</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
</span><span id="Spark2.Parser-152"><a href="#Spark2.Parser-152"><span class="linenos">152</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2.Parser-153"><a href="#Spark2.Parser-153"><span class="linenos">153</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2.Parser-154"><a href="#Spark2.Parser-154"><span class="linenos">154</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-155"><a href="#Spark2.Parser-155"><span class="linenos">155</span></a> <span class="s2">&quot;TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2.Parser-156"><a href="#Spark2.Parser-156"><span class="linenos">156</span></a> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;boolean&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-157"><a href="#Spark2.Parser-157"><span class="linenos">157</span></a> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-158"><a href="#Spark2.Parser-158"><span class="linenos">158</span></a> <span class="s2">&quot;FLOAT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-159"><a href="#Spark2.Parser-159"><span class="linenos">159</span></a> <span class="s2">&quot;INT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;int&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-160"><a href="#Spark2.Parser-160"><span class="linenos">160</span></a> <span class="s2">&quot;STRING&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;string&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-161"><a href="#Spark2.Parser-161"><span class="linenos">161</span></a> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-162"><a href="#Spark2.Parser-162"><span class="linenos">162</span></a> <span class="p">}</span>
</span><span id="Spark2.Parser-163"><a href="#Spark2.Parser-163"><span class="linenos">163</span></a>
</span><span id="Spark2.Parser-164"><a href="#Spark2.Parser-164"><span class="linenos">164</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2.Parser-165"><a href="#Spark2.Parser-165"><span class="linenos">165</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">FUNCTION_PARSERS</span><span class="p">,</span>
</span><span id="Spark2.Parser-166"><a href="#Spark2.Parser-166"><span class="linenos">166</span></a> <span class="s2">&quot;BROADCAST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCAST&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-167"><a href="#Spark2.Parser-167"><span class="linenos">167</span></a> <span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-168"><a href="#Spark2.Parser-168"><span class="linenos">168</span></a> <span class="s2">&quot;MAPJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MAPJOIN&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-169"><a href="#Spark2.Parser-169"><span class="linenos">169</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGE&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-170"><a href="#Spark2.Parser-170"><span class="linenos">170</span></a> <span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-171"><a href="#Spark2.Parser-171"><span class="linenos">171</span></a> <span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-172"><a href="#Spark2.Parser-172"><span class="linenos">172</span></a> <span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-173"><a href="#Spark2.Parser-173"><span class="linenos">173</span></a> <span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-174"><a href="#Spark2.Parser-174"><span class="linenos">174</span></a> <span class="p">}</span>
</span><span id="Spark2.Parser-175"><a href="#Spark2.Parser-175"><span class="linenos">175</span></a>
</span><span id="Spark2.Parser-176"><a href="#Spark2.Parser-176"><span class="linenos">176</span></a> <span class="k">def</span> <span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Spark2.Parser-177"><a href="#Spark2.Parser-177"><span class="linenos">177</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span>
</span><span id="Spark2.Parser-178"><a href="#Spark2.Parser-178"><span class="linenos">178</span></a>
</span><span id="Spark2.Parser-179"><a href="#Spark2.Parser-179"><span class="linenos">179</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Spark2.Parser-180"><a href="#Spark2.Parser-180"><span class="linenos">180</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DROP&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Spark2.Parser-181"><a href="#Spark2.Parser-181"><span class="linenos">181</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
</span><span id="Spark2.Parser-182"><a href="#Spark2.Parser-182"><span class="linenos">182</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(),</span>
</span><span id="Spark2.Parser-183"><a href="#Spark2.Parser-183"><span class="linenos">183</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span>
</span><span id="Spark2.Parser-184"><a href="#Spark2.Parser-184"><span class="linenos">184</span></a> <span class="p">)</span>
</span><span id="Spark2.Parser-185"><a href="#Spark2.Parser-185"><span class="linenos">185</span></a>
</span><span id="Spark2.Parser-186"><a href="#Spark2.Parser-186"><span class="linenos">186</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
</span><span id="Spark2.Parser-187"><a href="#Spark2.Parser-187"><span class="linenos">187</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Spark2.Parser-188"><a href="#Spark2.Parser-188"><span class="linenos">188</span></a> <span class="k">return</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">]</span>
</span><span id="Spark2.Parser-189"><a href="#Spark2.Parser-189"><span class="linenos">189</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="s2">&quot;spark&quot;</span><span class="p">)</span>
</span><span id="Spark2.Parser-116"><a href="#Spark2.Parser-116"><span class="linenos">116</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2.Parser-117"><a href="#Spark2.Parser-117"><span class="linenos">117</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-118"><a href="#Spark2.Parser-118"><span class="linenos">118</span></a> <span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">(</span>
</span><span id="Spark2.Parser-119"><a href="#Spark2.Parser-119"><span class="linenos">119</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
</span><span id="Spark2.Parser-120"><a href="#Spark2.Parser-120"><span class="linenos">120</span></a> <span class="n">expression</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2.Parser-121"><a href="#Spark2.Parser-121"><span class="linenos">121</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-122"><a href="#Spark2.Parser-122"><span class="linenos">122</span></a> <span class="s2">&quot;APPROX_PERCENTILE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxQuantile</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2.Parser-123"><a href="#Spark2.Parser-123"><span class="linenos">123</span></a> <span class="s2">&quot;IIF&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">If</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2.Parser-124"><a href="#Spark2.Parser-124"><span class="linenos">124</span></a> <span class="s2">&quot;AGGREGATE&quot;</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="o">.</span><span class="n">from_arg_list</span><span class="p">,</span>
</span><span id="Spark2.Parser-125"><a href="#Spark2.Parser-125"><span class="linenos">125</span></a> <span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">(</span>
</span><span id="Spark2.Parser-126"><a href="#Spark2.Parser-126"><span class="linenos">126</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2.Parser-127"><a href="#Spark2.Parser-127"><span class="linenos">127</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-128"><a href="#Spark2.Parser-128"><span class="linenos">128</span></a> <span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">(</span>
</span><span id="Spark2.Parser-129"><a href="#Spark2.Parser-129"><span class="linenos">129</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2.Parser-130"><a href="#Spark2.Parser-130"><span class="linenos">130</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-131"><a href="#Spark2.Parser-131"><span class="linenos">131</span></a> <span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">(</span>
</span><span id="Spark2.Parser-132"><a href="#Spark2.Parser-132"><span class="linenos">132</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2.Parser-133"><a href="#Spark2.Parser-133"><span class="linenos">133</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-134"><a href="#Spark2.Parser-134"><span class="linenos">134</span></a> <span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">(</span>
</span><span id="Spark2.Parser-135"><a href="#Spark2.Parser-135"><span class="linenos">135</span></a> <span class="n">this</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">TsOrDsToDate</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2.Parser-136"><a href="#Spark2.Parser-136"><span class="linenos">136</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-137"><a href="#Spark2.Parser-137"><span class="linenos">137</span></a> <span class="s2">&quot;DATE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="n">to</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">)),</span>
</span><span id="Spark2.Parser-138"><a href="#Spark2.Parser-138"><span class="linenos">138</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">(</span>
</span><span id="Spark2.Parser-139"><a href="#Spark2.Parser-139"><span class="linenos">139</span></a> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
</span><span id="Spark2.Parser-140"><a href="#Spark2.Parser-140"><span class="linenos">140</span></a> <span class="n">unit</span><span class="o">=</span><span class="n">exp</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2.Parser-141"><a href="#Spark2.Parser-141"><span class="linenos">141</span></a> <span class="p">),</span>
</span><span id="Spark2.Parser-142"><a href="#Spark2.Parser-142"><span class="linenos">142</span></a> <span class="s2">&quot;TRUNC&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="n">args</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">(</span><span class="n">unit</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="n">this</span><span class="o">=</span><span class="n">seq_get</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)),</span>
</span><span id="Spark2.Parser-143"><a href="#Spark2.Parser-143"><span class="linenos">143</span></a> <span class="s2">&quot;BOOLEAN&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;boolean&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-144"><a href="#Spark2.Parser-144"><span class="linenos">144</span></a> <span class="s2">&quot;DOUBLE&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;double&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-145"><a href="#Spark2.Parser-145"><span class="linenos">145</span></a> <span class="s2">&quot;FLOAT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;float&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-146"><a href="#Spark2.Parser-146"><span class="linenos">146</span></a> <span class="s2">&quot;INT&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;int&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-147"><a href="#Spark2.Parser-147"><span class="linenos">147</span></a> <span class="s2">&quot;STRING&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;string&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-148"><a href="#Spark2.Parser-148"><span class="linenos">148</span></a> <span class="s2">&quot;TIMESTAMP&quot;</span><span class="p">:</span> <span class="n">_parse_as_cast</span><span class="p">(</span><span class="s2">&quot;timestamp&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-149"><a href="#Spark2.Parser-149"><span class="linenos">149</span></a> <span class="p">}</span>
</span><span id="Spark2.Parser-150"><a href="#Spark2.Parser-150"><span class="linenos">150</span></a>
</span><span id="Spark2.Parser-151"><a href="#Spark2.Parser-151"><span class="linenos">151</span></a> <span class="n">FUNCTION_PARSERS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2.Parser-152"><a href="#Spark2.Parser-152"><span class="linenos">152</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">FUNCTION_PARSERS</span><span class="p">,</span>
</span><span id="Spark2.Parser-153"><a href="#Spark2.Parser-153"><span class="linenos">153</span></a> <span class="s2">&quot;BROADCAST&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCAST&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-154"><a href="#Spark2.Parser-154"><span class="linenos">154</span></a> <span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;BROADCASTJOIN&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-155"><a href="#Spark2.Parser-155"><span class="linenos">155</span></a> <span class="s2">&quot;MAPJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MAPJOIN&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-156"><a href="#Spark2.Parser-156"><span class="linenos">156</span></a> <span class="s2">&quot;MERGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGE&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-157"><a href="#Spark2.Parser-157"><span class="linenos">157</span></a> <span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLEMERGE&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-158"><a href="#Spark2.Parser-158"><span class="linenos">158</span></a> <span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;MERGEJOIN&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-159"><a href="#Spark2.Parser-159"><span class="linenos">159</span></a> <span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_HASH&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-160"><a href="#Spark2.Parser-160"><span class="linenos">160</span></a> <span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_join_hint</span><span class="p">(</span><span class="s2">&quot;SHUFFLE_REPLICATE_NL&quot;</span><span class="p">),</span>
</span><span id="Spark2.Parser-161"><a href="#Spark2.Parser-161"><span class="linenos">161</span></a> <span class="p">}</span>
</span><span id="Spark2.Parser-162"><a href="#Spark2.Parser-162"><span class="linenos">162</span></a>
</span><span id="Spark2.Parser-163"><a href="#Spark2.Parser-163"><span class="linenos">163</span></a> <span class="k">def</span> <span class="nf">_parse_add_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Spark2.Parser-164"><a href="#Spark2.Parser-164"><span class="linenos">164</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;ADD&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">()</span>
</span><span id="Spark2.Parser-165"><a href="#Spark2.Parser-165"><span class="linenos">165</span></a>
</span><span id="Spark2.Parser-166"><a href="#Spark2.Parser-166"><span class="linenos">166</span></a> <span class="k">def</span> <span class="nf">_parse_drop_column</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">Optional</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">]:</span>
</span><span id="Spark2.Parser-167"><a href="#Spark2.Parser-167"><span class="linenos">167</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_match_text_seq</span><span class="p">(</span><span class="s2">&quot;DROP&quot;</span><span class="p">,</span> <span class="s2">&quot;COLUMNS&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">expression</span><span class="p">(</span>
</span><span id="Spark2.Parser-168"><a href="#Spark2.Parser-168"><span class="linenos">168</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Drop</span><span class="p">,</span>
</span><span id="Spark2.Parser-169"><a href="#Spark2.Parser-169"><span class="linenos">169</span></a> <span class="n">this</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_parse_schema</span><span class="p">(),</span>
</span><span id="Spark2.Parser-170"><a href="#Spark2.Parser-170"><span class="linenos">170</span></a> <span class="n">kind</span><span class="o">=</span><span class="s2">&quot;COLUMNS&quot;</span><span class="p">,</span>
</span><span id="Spark2.Parser-171"><a href="#Spark2.Parser-171"><span class="linenos">171</span></a> <span class="p">)</span>
</span><span id="Spark2.Parser-172"><a href="#Spark2.Parser-172"><span class="linenos">172</span></a>
</span><span id="Spark2.Parser-173"><a href="#Spark2.Parser-173"><span class="linenos">173</span></a> <span class="k">def</span> <span class="nf">_pivot_column_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">aggregations</span><span class="p">:</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">])</span> <span class="o">-&gt;</span> <span class="n">t</span><span class="o">.</span><span class="n">List</span><span class="p">[</span><span class="nb">str</span><span class="p">]:</span>
</span><span id="Spark2.Parser-174"><a href="#Spark2.Parser-174"><span class="linenos">174</span></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">aggregations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span><span id="Spark2.Parser-175"><a href="#Spark2.Parser-175"><span class="linenos">175</span></a> <span class="k">return</span> <span class="p">[</span><span class="s2">&quot;&quot;</span><span class="p">]</span>
</span><span id="Spark2.Parser-176"><a href="#Spark2.Parser-176"><span class="linenos">176</span></a> <span class="k">return</span> <span class="n">pivot_column_names</span><span class="p">(</span><span class="n">aggregations</span><span class="p">,</span> <span class="n">dialect</span><span class="o">=</span><span class="s2">&quot;spark&quot;</span><span class="p">)</span>
</span></pre></div>
@ -653,7 +614,7 @@ a parsed syntax tree.</p>
<ul>
<li><strong>error_level:</strong> the desired error level.
Default: ErrorLevel.RAISE</li>
Default: ErrorLevel.IMMEDIATE</li>
<li><strong>error_message_context:</strong> determines the amount of context to capture from a
query string when displaying the error message (in number of characters).
Default: 50.</li>
@ -699,82 +660,82 @@ Default: "nulls_are_small"</li>
</div>
<a class="headerlink" href="#Spark2.Generator"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator-191"><a href="#Spark2.Generator-191"><span class="linenos">191</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Spark2.Generator-192"><a href="#Spark2.Generator-192"><span class="linenos">192</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2.Generator-193"><a href="#Spark2.Generator-193"><span class="linenos">193</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
</span><span id="Spark2.Generator-194"><a href="#Spark2.Generator-194"><span class="linenos">194</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;BYTE&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-195"><a href="#Spark2.Generator-195"><span class="linenos">195</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;SHORT&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-196"><a href="#Spark2.Generator-196"><span class="linenos">196</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;LONG&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-197"><a href="#Spark2.Generator-197"><span class="linenos">197</span></a> <span class="p">}</span>
</span><span id="Spark2.Generator-198"><a href="#Spark2.Generator-198"><span class="linenos">198</span></a>
</span><span id="Spark2.Generator-199"><a href="#Spark2.Generator-199"><span class="linenos">199</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2.Generator-200"><a href="#Spark2.Generator-200"><span class="linenos">200</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
</span><span id="Spark2.Generator-201"><a href="#Spark2.Generator-201"><span class="linenos">201</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2.Generator-202"><a href="#Spark2.Generator-202"><span class="linenos">202</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2.Generator-203"><a href="#Spark2.Generator-203"><span class="linenos">203</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2.Generator-204"><a href="#Spark2.Generator-204"><span class="linenos">204</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2.Generator-205"><a href="#Spark2.Generator-205"><span class="linenos">205</span></a> <span class="p">}</span>
</span><span id="Spark2.Generator-206"><a href="#Spark2.Generator-206"><span class="linenos">206</span></a>
</span><span id="Spark2.Generator-207"><a href="#Spark2.Generator-207"><span class="linenos">207</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2.Generator-208"><a href="#Spark2.Generator-208"><span class="linenos">208</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><span id="Spark2.Generator-209"><a href="#Spark2.Generator-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-210"><a href="#Spark2.Generator-210"><span class="linenos">210</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;AGGREGATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, 0, (acc, x) -&gt; acc + x, acc -&gt; acc)&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-211"><a href="#Spark2.Generator-211"><span class="linenos">211</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UTC_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;zone&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-212"><a href="#Spark2.Generator-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-213"><a href="#Spark2.Generator-213"><span class="linenos">213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-214"><a href="#Spark2.Generator-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
</span><span id="Spark2.Generator-215"><a href="#Spark2.Generator-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-216"><a href="#Spark2.Generator-216"><span class="linenos">216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRUNC&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
</span><span id="Spark2.Generator-217"><a href="#Spark2.Generator-217"><span class="linenos">217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-218"><a href="#Spark2.Generator-218"><span class="linenos">218</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-219"><a href="#Spark2.Generator-219"><span class="linenos">219</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-220"><a href="#Spark2.Generator-220"><span class="linenos">220</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-221"><a href="#Spark2.Generator-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unalias_pivot</span><span class="p">]),</span>
</span><span id="Spark2.Generator-222"><a href="#Spark2.Generator-222"><span class="linenos">222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-223"><a href="#Spark2.Generator-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-224"><a href="#Spark2.Generator-224"><span class="linenos">224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-225"><a href="#Spark2.Generator-225"><span class="linenos">225</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">_map_sql</span><span class="p">,</span>
</span><span id="Spark2.Generator-226"><a href="#Spark2.Generator-226"><span class="linenos">226</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unqualify_pivot_columns</span><span class="p">]),</span>
</span><span id="Spark2.Generator-227"><a href="#Spark2.Generator-227"><span class="linenos">227</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AGGREGATE&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-228"><a href="#Spark2.Generator-228"><span class="linenos">228</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
</span><span id="Spark2.Generator-229"><a href="#Spark2.Generator-229"><span class="linenos">229</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-230"><a href="#Spark2.Generator-230"><span class="linenos">230</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="Spark2.Generator-231"><a href="#Spark2.Generator-231"><span class="linenos">231</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="Spark2.Generator-232"><a href="#Spark2.Generator-232"><span class="linenos">232</span></a> <span class="p">),</span>
</span><span id="Spark2.Generator-233"><a href="#Spark2.Generator-233"><span class="linenos">233</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
</span><span id="Spark2.Generator-234"><a href="#Spark2.Generator-234"><span class="linenos">234</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</span>
</span><span id="Spark2.Generator-235"><a href="#Spark2.Generator-235"><span class="linenos">235</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-236"><a href="#Spark2.Generator-236"><span class="linenos">236</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-237"><a href="#Spark2.Generator-237"><span class="linenos">237</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
</span><span id="Spark2.Generator-238"><a href="#Spark2.Generator-238"><span class="linenos">238</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
</span><span id="Spark2.Generator-239"><a href="#Spark2.Generator-239"><span class="linenos">239</span></a> <span class="p">),</span>
</span><span id="Spark2.Generator-240"><a href="#Spark2.Generator-240"><span class="linenos">240</span></a> <span class="p">}</span>
</span><span id="Spark2.Generator-241"><a href="#Spark2.Generator-241"><span class="linenos">241</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">)</span>
</span><span id="Spark2.Generator-242"><a href="#Spark2.Generator-242"><span class="linenos">242</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArraySort</span><span class="p">)</span>
</span><span id="Spark2.Generator-243"><a href="#Spark2.Generator-243"><span class="linenos">243</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">)</span>
</span><span id="Spark2.Generator-244"><a href="#Spark2.Generator-244"><span class="linenos">244</span></a>
</span><span id="Spark2.Generator-245"><a href="#Spark2.Generator-245"><span class="linenos">245</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Spark2.Generator-246"><a href="#Spark2.Generator-246"><span class="linenos">246</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Spark2.Generator-247"><a href="#Spark2.Generator-247"><span class="linenos">247</span></a>
</span><span id="Spark2.Generator-248"><a href="#Spark2.Generator-248"><span class="linenos">248</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Spark2.Generator-249"><a href="#Spark2.Generator-249"><span class="linenos">249</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span>
</span><span id="Spark2.Generator-250"><a href="#Spark2.Generator-250"><span class="linenos">250</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span>
</span><span id="Spark2.Generator-251"><a href="#Spark2.Generator-251"><span class="linenos">251</span></a> <span class="p">):</span>
</span><span id="Spark2.Generator-252"><a href="#Spark2.Generator-252"><span class="linenos">252</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
</span><span id="Spark2.Generator-253"><a href="#Spark2.Generator-253"><span class="linenos">253</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;FROM_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
</span><span id="Spark2.Generator-254"><a href="#Spark2.Generator-254"><span class="linenos">254</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span><span class="p">):</span>
</span><span id="Spark2.Generator-255"><a href="#Spark2.Generator-255"><span class="linenos">255</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TO_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="Spark2.Generator-256"><a href="#Spark2.Generator-256"><span class="linenos">256</span></a>
</span><span id="Spark2.Generator-257"><a href="#Spark2.Generator-257"><span class="linenos">257</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Spark2.Generator-258"><a href="#Spark2.Generator-258"><span class="linenos">258</span></a>
</span><span id="Spark2.Generator-259"><a href="#Spark2.Generator-259"><span class="linenos">259</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Spark2.Generator-260"><a href="#Spark2.Generator-260"><span class="linenos">260</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
</span><span id="Spark2.Generator-261"><a href="#Spark2.Generator-261"><span class="linenos">261</span></a> <span class="n">expression</span><span class="p">,</span>
</span><span id="Spark2.Generator-262"><a href="#Spark2.Generator-262"><span class="linenos">262</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
</span><span id="Spark2.Generator-263"><a href="#Spark2.Generator-263"><span class="linenos">263</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
</span><span id="Spark2.Generator-264"><a href="#Spark2.Generator-264"><span class="linenos">264</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">)</span>
</span><span id="Spark2.Generator-265"><a href="#Spark2.Generator-265"><span class="linenos">265</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
</span><span id="Spark2.Generator-266"><a href="#Spark2.Generator-266"><span class="linenos">266</span></a> <span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator-178"><a href="#Spark2.Generator-178"><span class="linenos">178</span></a> <span class="k">class</span> <span class="nc">Generator</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">):</span>
</span><span id="Spark2.Generator-179"><a href="#Spark2.Generator-179"><span class="linenos">179</span></a> <span class="n">TYPE_MAPPING</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2.Generator-180"><a href="#Spark2.Generator-180"><span class="linenos">180</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TYPE_MAPPING</span><span class="p">,</span>
</span><span id="Spark2.Generator-181"><a href="#Spark2.Generator-181"><span class="linenos">181</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">TINYINT</span><span class="p">:</span> <span class="s2">&quot;BYTE&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-182"><a href="#Spark2.Generator-182"><span class="linenos">182</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">SMALLINT</span><span class="p">:</span> <span class="s2">&quot;SHORT&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-183"><a href="#Spark2.Generator-183"><span class="linenos">183</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">BIGINT</span><span class="p">:</span> <span class="s2">&quot;LONG&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-184"><a href="#Spark2.Generator-184"><span class="linenos">184</span></a> <span class="p">}</span>
</span><span id="Spark2.Generator-185"><a href="#Spark2.Generator-185"><span class="linenos">185</span></a>
</span><span id="Spark2.Generator-186"><a href="#Spark2.Generator-186"><span class="linenos">186</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2.Generator-187"><a href="#Spark2.Generator-187"><span class="linenos">187</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
</span><span id="Spark2.Generator-188"><a href="#Spark2.Generator-188"><span class="linenos">188</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">EngineProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2.Generator-189"><a href="#Spark2.Generator-189"><span class="linenos">189</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AutoIncrementProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2.Generator-190"><a href="#Spark2.Generator-190"><span class="linenos">190</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CharacterSetProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2.Generator-191"><a href="#Spark2.Generator-191"><span class="linenos">191</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">CollateProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">UNSUPPORTED</span><span class="p">,</span>
</span><span id="Spark2.Generator-192"><a href="#Spark2.Generator-192"><span class="linenos">192</span></a> <span class="p">}</span>
</span><span id="Spark2.Generator-193"><a href="#Spark2.Generator-193"><span class="linenos">193</span></a>
</span><span id="Spark2.Generator-194"><a href="#Spark2.Generator-194"><span class="linenos">194</span></a> <span class="n">TRANSFORMS</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Spark2.Generator-195"><a href="#Spark2.Generator-195"><span class="linenos">195</span></a> <span class="o">**</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">TRANSFORMS</span><span class="p">,</span>
</span><span id="Spark2.Generator-196"><a href="#Spark2.Generator-196"><span class="linenos">196</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ApproxDistinct</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;APPROX_COUNT_DISTINCT&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-197"><a href="#Spark2.Generator-197"><span class="linenos">197</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">ArraySum</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;AGGREGATE(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, 0, (acc, x) -&gt; acc + x, acc -&gt; acc)&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-198"><a href="#Spark2.Generator-198"><span class="linenos">198</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">AtTimeZone</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;FROM_UTC_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;zone&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-199"><a href="#Spark2.Generator-199"><span class="linenos">199</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseLeftShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTLEFT&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-200"><a href="#Spark2.Generator-200"><span class="linenos">200</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">BitwiseRightShift</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;SHIFTRIGHT&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-201"><a href="#Spark2.Generator-201"><span class="linenos">201</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Create</span><span class="p">:</span> <span class="n">_create_sql</span><span class="p">,</span>
</span><span id="Spark2.Generator-202"><a href="#Spark2.Generator-202"><span class="linenos">202</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateFromParts</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;MAKE_DATE&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-203"><a href="#Spark2.Generator-203"><span class="linenos">203</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DateTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TRUNC&quot;</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span>
</span><span id="Spark2.Generator-204"><a href="#Spark2.Generator-204"><span class="linenos">204</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfMonth</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFMONTH&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-205"><a href="#Spark2.Generator-205"><span class="linenos">205</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfWeek</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFWEEK&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-206"><a href="#Spark2.Generator-206"><span class="linenos">206</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DayOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;DAYOFYEAR&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-207"><a href="#Spark2.Generator-207"><span class="linenos">207</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">FileFormatProperty</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;USING </span><span class="si">{</span><span class="n">e</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-208"><a href="#Spark2.Generator-208"><span class="linenos">208</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">From</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unalias_pivot</span><span class="p">]),</span>
</span><span id="Spark2.Generator-209"><a href="#Spark2.Generator-209"><span class="linenos">209</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Hint</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot; /*+ </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">expressions</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2"> */&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-210"><a href="#Spark2.Generator-210"><span class="linenos">210</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalAnd</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_AND&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-211"><a href="#Spark2.Generator-211"><span class="linenos">211</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">LogicalOr</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;BOOL_OR&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-212"><a href="#Spark2.Generator-212"><span class="linenos">212</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Map</span><span class="p">:</span> <span class="n">_map_sql</span><span class="p">,</span>
</span><span id="Spark2.Generator-213"><a href="#Spark2.Generator-213"><span class="linenos">213</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Pivot</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">([</span><span class="n">_unqualify_pivot_columns</span><span class="p">]),</span>
</span><span id="Spark2.Generator-214"><a href="#Spark2.Generator-214"><span class="linenos">214</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Reduce</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;AGGREGATE&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-215"><a href="#Spark2.Generator-215"><span class="linenos">215</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToDate</span><span class="p">:</span> <span class="n">_str_to_date</span><span class="p">,</span>
</span><span id="Spark2.Generator-216"><a href="#Spark2.Generator-216"><span class="linenos">216</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StrToTime</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;TO_TIMESTAMP(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">e</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;this&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">format_time</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">,</span>
</span><span id="Spark2.Generator-217"><a href="#Spark2.Generator-217"><span class="linenos">217</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">TimestampTrunc</span><span class="p">:</span> <span class="k">lambda</span> <span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span>
</span><span id="Spark2.Generator-218"><a href="#Spark2.Generator-218"><span class="linenos">218</span></a> <span class="s2">&quot;DATE_TRUNC&quot;</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Literal</span><span class="o">.</span><span class="n">string</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">text</span><span class="p">(</span><span class="s2">&quot;unit&quot;</span><span class="p">)),</span> <span class="n">e</span><span class="o">.</span><span class="n">this</span>
</span><span id="Spark2.Generator-219"><a href="#Spark2.Generator-219"><span class="linenos">219</span></a> <span class="p">),</span>
</span><span id="Spark2.Generator-220"><a href="#Spark2.Generator-220"><span class="linenos">220</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">Trim</span><span class="p">:</span> <span class="n">trim_sql</span><span class="p">,</span>
</span><span id="Spark2.Generator-221"><a href="#Spark2.Generator-221"><span class="linenos">221</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">UnixToTime</span><span class="p">:</span> <span class="n">_unix_to_time_sql</span><span class="p">,</span>
</span><span id="Spark2.Generator-222"><a href="#Spark2.Generator-222"><span class="linenos">222</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">VariancePop</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;VAR_POP&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-223"><a href="#Spark2.Generator-223"><span class="linenos">223</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WeekOfYear</span><span class="p">:</span> <span class="n">rename_func</span><span class="p">(</span><span class="s2">&quot;WEEKOFYEAR&quot;</span><span class="p">),</span>
</span><span id="Spark2.Generator-224"><a href="#Spark2.Generator-224"><span class="linenos">224</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">WithinGroup</span><span class="p">:</span> <span class="n">transforms</span><span class="o">.</span><span class="n">preprocess</span><span class="p">(</span>
</span><span id="Spark2.Generator-225"><a href="#Spark2.Generator-225"><span class="linenos">225</span></a> <span class="p">[</span><span class="n">transforms</span><span class="o">.</span><span class="n">remove_within_group_for_percentiles</span><span class="p">]</span>
</span><span id="Spark2.Generator-226"><a href="#Spark2.Generator-226"><span class="linenos">226</span></a> <span class="p">),</span>
</span><span id="Spark2.Generator-227"><a href="#Spark2.Generator-227"><span class="linenos">227</span></a> <span class="p">}</span>
</span><span id="Spark2.Generator-228"><a href="#Spark2.Generator-228"><span class="linenos">228</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArrayJoin</span><span class="p">)</span>
</span><span id="Spark2.Generator-229"><a href="#Spark2.Generator-229"><span class="linenos">229</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ArraySort</span><span class="p">)</span>
</span><span id="Spark2.Generator-230"><a href="#Spark2.Generator-230"><span class="linenos">230</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">ILike</span><span class="p">)</span>
</span><span id="Spark2.Generator-231"><a href="#Spark2.Generator-231"><span class="linenos">231</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Left</span><span class="p">)</span>
</span><span id="Spark2.Generator-232"><a href="#Spark2.Generator-232"><span class="linenos">232</span></a> <span class="n">TRANSFORMS</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Right</span><span class="p">)</span>
</span><span id="Spark2.Generator-233"><a href="#Spark2.Generator-233"><span class="linenos">233</span></a>
</span><span id="Spark2.Generator-234"><a href="#Spark2.Generator-234"><span class="linenos">234</span></a> <span class="n">WRAP_DERIVED_VALUES</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Spark2.Generator-235"><a href="#Spark2.Generator-235"><span class="linenos">235</span></a> <span class="n">CREATE_FUNCTION_RETURN_AS</span> <span class="o">=</span> <span class="kc">False</span>
</span><span id="Spark2.Generator-236"><a href="#Spark2.Generator-236"><span class="linenos">236</span></a>
</span><span id="Spark2.Generator-237"><a href="#Spark2.Generator-237"><span class="linenos">237</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Spark2.Generator-238"><a href="#Spark2.Generator-238"><span class="linenos">238</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">):</span>
</span><span id="Spark2.Generator-239"><a href="#Spark2.Generator-239"><span class="linenos">239</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
</span><span id="Spark2.Generator-240"><a href="#Spark2.Generator-240"><span class="linenos">240</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;FROM_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
</span><span id="Spark2.Generator-241"><a href="#Spark2.Generator-241"><span class="linenos">241</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">):</span>
</span><span id="Spark2.Generator-242"><a href="#Spark2.Generator-242"><span class="linenos">242</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TO_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="Spark2.Generator-243"><a href="#Spark2.Generator-243"><span class="linenos">243</span></a>
</span><span id="Spark2.Generator-244"><a href="#Spark2.Generator-244"><span class="linenos">244</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span><span id="Spark2.Generator-245"><a href="#Spark2.Generator-245"><span class="linenos">245</span></a>
</span><span id="Spark2.Generator-246"><a href="#Spark2.Generator-246"><span class="linenos">246</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Spark2.Generator-247"><a href="#Spark2.Generator-247"><span class="linenos">247</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
</span><span id="Spark2.Generator-248"><a href="#Spark2.Generator-248"><span class="linenos">248</span></a> <span class="n">expression</span><span class="p">,</span>
</span><span id="Spark2.Generator-249"><a href="#Spark2.Generator-249"><span class="linenos">249</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
</span><span id="Spark2.Generator-250"><a href="#Spark2.Generator-250"><span class="linenos">250</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
</span><span id="Spark2.Generator-251"><a href="#Spark2.Generator-251"><span class="linenos">251</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;struct&quot;</span><span class="p">)</span>
</span><span id="Spark2.Generator-252"><a href="#Spark2.Generator-252"><span class="linenos">252</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
</span><span id="Spark2.Generator-253"><a href="#Spark2.Generator-253"><span class="linenos">253</span></a> <span class="p">)</span>
</span></pre></div>
@ -810,6 +771,8 @@ represents a python time format and the output the target time format</li>
Default: "upper"</li>
<li><strong>alias_post_tablesample (bool):</strong> if the table alias comes after tablesample
Default: False</li>
<li><strong>identifiers_can_start_with_digit (bool):</strong> if an unquoted identifier can start with digit
Default: False</li>
<li><strong>unsupported_level (ErrorLevel):</strong> determines the generator's behavior when it encounters
unsupported expressions. Default ErrorLevel.WARN.</li>
<li><strong>null_ordering (str):</strong> Indicates the default null ordering method to use if not explicitly set.
@ -841,16 +804,14 @@ Default: True</li>
</div>
<a class="headerlink" href="#Spark2.Generator.cast_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator.cast_sql-248"><a href="#Spark2.Generator.cast_sql-248"><span class="linenos">248</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Spark2.Generator.cast_sql-249"><a href="#Spark2.Generator.cast_sql-249"><span class="linenos">249</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span>
</span><span id="Spark2.Generator.cast_sql-250"><a href="#Spark2.Generator.cast_sql-250"><span class="linenos">250</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span>
</span><span id="Spark2.Generator.cast_sql-251"><a href="#Spark2.Generator.cast_sql-251"><span class="linenos">251</span></a> <span class="p">):</span>
</span><span id="Spark2.Generator.cast_sql-252"><a href="#Spark2.Generator.cast_sql-252"><span class="linenos">252</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
</span><span id="Spark2.Generator.cast_sql-253"><a href="#Spark2.Generator.cast_sql-253"><span class="linenos">253</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;FROM_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
</span><span id="Spark2.Generator.cast_sql-254"><a href="#Spark2.Generator.cast_sql-254"><span class="linenos">254</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">JSON</span><span class="p">):</span>
</span><span id="Spark2.Generator.cast_sql-255"><a href="#Spark2.Generator.cast_sql-255"><span class="linenos">255</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TO_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="Spark2.Generator.cast_sql-256"><a href="#Spark2.Generator.cast_sql-256"><span class="linenos">256</span></a>
</span><span id="Spark2.Generator.cast_sql-257"><a href="#Spark2.Generator.cast_sql-257"><span class="linenos">257</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator.cast_sql-237"><a href="#Spark2.Generator.cast_sql-237"><span class="linenos">237</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Spark2.Generator.cast_sql-238"><a href="#Spark2.Generator.cast_sql-238"><span class="linenos">238</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">):</span>
</span><span id="Spark2.Generator.cast_sql-239"><a href="#Spark2.Generator.cast_sql-239"><span class="linenos">239</span></a> <span class="n">schema</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">sql</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span><span class="w"> </span><span class="s1">&#39;to&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&#39;&quot;</span>
</span><span id="Spark2.Generator.cast_sql-240"><a href="#Spark2.Generator.cast_sql-240"><span class="linenos">240</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;FROM_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="o">.</span><span class="n">this</span><span class="p">,</span> <span class="n">schema</span><span class="p">)</span>
</span><span id="Spark2.Generator.cast_sql-241"><a href="#Spark2.Generator.cast_sql-241"><span class="linenos">241</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;json&quot;</span><span class="p">):</span>
</span><span id="Spark2.Generator.cast_sql-242"><a href="#Spark2.Generator.cast_sql-242"><span class="linenos">242</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;TO_JSON&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="Spark2.Generator.cast_sql-243"><a href="#Spark2.Generator.cast_sql-243"><span class="linenos">243</span></a>
</span><span id="Spark2.Generator.cast_sql-244"><a href="#Spark2.Generator.cast_sql-244"><span class="linenos">244</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Generator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
</span></pre></div>
@ -868,14 +829,14 @@ Default: True</li>
</div>
<a class="headerlink" href="#Spark2.Generator.columndef_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator.columndef_sql-259"><a href="#Spark2.Generator.columndef_sql-259"><span class="linenos">259</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Spark2.Generator.columndef_sql-260"><a href="#Spark2.Generator.columndef_sql-260"><span class="linenos">260</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
</span><span id="Spark2.Generator.columndef_sql-261"><a href="#Spark2.Generator.columndef_sql-261"><span class="linenos">261</span></a> <span class="n">expression</span><span class="p">,</span>
</span><span id="Spark2.Generator.columndef_sql-262"><a href="#Spark2.Generator.columndef_sql-262"><span class="linenos">262</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
</span><span id="Spark2.Generator.columndef_sql-263"><a href="#Spark2.Generator.columndef_sql-263"><span class="linenos">263</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
</span><span id="Spark2.Generator.columndef_sql-264"><a href="#Spark2.Generator.columndef_sql-264"><span class="linenos">264</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">STRUCT</span><span class="p">)</span>
</span><span id="Spark2.Generator.columndef_sql-265"><a href="#Spark2.Generator.columndef_sql-265"><span class="linenos">265</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
</span><span id="Spark2.Generator.columndef_sql-266"><a href="#Spark2.Generator.columndef_sql-266"><span class="linenos">266</span></a> <span class="p">)</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Generator.columndef_sql-246"><a href="#Spark2.Generator.columndef_sql-246"><span class="linenos">246</span></a> <span class="k">def</span> <span class="nf">columndef_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">ColumnDef</span><span class="p">,</span> <span class="n">sep</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="Spark2.Generator.columndef_sql-247"><a href="#Spark2.Generator.columndef_sql-247"><span class="linenos">247</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">columndef_sql</span><span class="p">(</span>
</span><span id="Spark2.Generator.columndef_sql-248"><a href="#Spark2.Generator.columndef_sql-248"><span class="linenos">248</span></a> <span class="n">expression</span><span class="p">,</span>
</span><span id="Spark2.Generator.columndef_sql-249"><a href="#Spark2.Generator.columndef_sql-249"><span class="linenos">249</span></a> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;: &quot;</span>
</span><span id="Spark2.Generator.columndef_sql-250"><a href="#Spark2.Generator.columndef_sql-250"><span class="linenos">250</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="p">)</span>
</span><span id="Spark2.Generator.columndef_sql-251"><a href="#Spark2.Generator.columndef_sql-251"><span class="linenos">251</span></a> <span class="ow">and</span> <span class="n">expression</span><span class="o">.</span><span class="n">parent</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;struct&quot;</span><span class="p">)</span>
</span><span id="Spark2.Generator.columndef_sql-252"><a href="#Spark2.Generator.columndef_sql-252"><span class="linenos">252</span></a> <span class="k">else</span> <span class="n">sep</span><span class="p">,</span>
</span><span id="Spark2.Generator.columndef_sql-253"><a href="#Spark2.Generator.columndef_sql-253"><span class="linenos">253</span></a> <span class="p">)</span>
</span></pre></div>
@ -1021,7 +982,6 @@ Default: True</li>
<dd id="Spark2.Generator.check_sql" class="function"><a href="../generator.html#Generator.check_sql">check_sql</a></dd>
<dd id="Spark2.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
<dd id="Spark2.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
<dd id="Spark2.Generator.unique_sql" class="function"><a href="../generator.html#Generator.unique_sql">unique_sql</a></dd>
<dd id="Spark2.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
<dd id="Spark2.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="Spark2.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
@ -1113,6 +1073,9 @@ Default: True</li>
<dd id="Spark2.Generator.when_sql" class="function"><a href="../generator.html#Generator.when_sql">when_sql</a></dd>
<dd id="Spark2.Generator.merge_sql" class="function"><a href="../generator.html#Generator.merge_sql">merge_sql</a></dd>
<dd id="Spark2.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
<dd id="Spark2.Generator.dictproperty_sql" class="function"><a href="../generator.html#Generator.dictproperty_sql">dictproperty_sql</a></dd>
<dd id="Spark2.Generator.dictrange_sql" class="function"><a href="../generator.html#Generator.dictrange_sql">dictrange_sql</a></dd>
<dd id="Spark2.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
</div>
<div><dt><a href="hive.html#Hive.Generator">sqlglot.dialects.hive.Hive.Generator</a></dt>
@ -1136,8 +1099,8 @@ Default: True</li>
</div>
<a class="headerlink" href="#Spark2.Tokenizer"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Tokenizer-268"><a href="#Spark2.Tokenizer-268"><span class="linenos">268</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Spark2.Tokenizer-269"><a href="#Spark2.Tokenizer-269"><span class="linenos">269</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;X&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
<div class="pdoc-code codehilite"><pre><span></span><span id="Spark2.Tokenizer-255"><a href="#Spark2.Tokenizer-255"><span class="linenos">255</span></a> <span class="k">class</span> <span class="nc">Tokenizer</span><span class="p">(</span><span class="n">Hive</span><span class="o">.</span><span class="n">Tokenizer</span><span class="p">):</span>
</span><span id="Spark2.Tokenizer-256"><a href="#Spark2.Tokenizer-256"><span class="linenos">256</span></a> <span class="n">HEX_STRINGS</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;X&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">)]</span>
</span></pre></div>

View file

@ -226,7 +226,7 @@
</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>
</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">):</span>
</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a>
</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
@ -377,7 +377,7 @@
</span><span id="SQLite-133"><a href="#SQLite-133"><span class="linenos">133</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
</span><span id="SQLite-134"><a href="#SQLite-134"><span class="linenos">134</span></a>
</span><span id="SQLite-135"><a href="#SQLite-135"><span class="linenos">135</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite-136"><a href="#SQLite-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
</span><span id="SQLite-136"><a href="#SQLite-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">):</span>
</span><span id="SQLite-137"><a href="#SQLite-137"><span class="linenos">137</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="SQLite-138"><a href="#SQLite-138"><span class="linenos">138</span></a>
</span><span id="SQLite-139"><a href="#SQLite-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
@ -521,7 +521,7 @@ a parsed syntax tree.</p>
<ul>
<li><strong>error_level:</strong> the desired error level.
Default: ErrorLevel.RAISE</li>
Default: ErrorLevel.IMMEDIATE</li>
<li><strong>error_message_context:</strong> determines the amount of context to capture from a
query string when displaying the error message (in number of characters).
Default: 50.</li>
@ -627,7 +627,7 @@ Default: "nulls_are_small"</li>
</span><span id="SQLite.Generator-133"><a href="#SQLite.Generator-133"><span class="linenos">133</span></a> <span class="n">LIMIT_FETCH</span> <span class="o">=</span> <span class="s2">&quot;LIMIT&quot;</span>
</span><span id="SQLite.Generator-134"><a href="#SQLite.Generator-134"><span class="linenos">134</span></a>
</span><span id="SQLite.Generator-135"><a href="#SQLite.Generator-135"><span class="linenos">135</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator-136"><a href="#SQLite.Generator-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
</span><span id="SQLite.Generator-136"><a href="#SQLite.Generator-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">):</span>
</span><span id="SQLite.Generator-137"><a href="#SQLite.Generator-137"><span class="linenos">137</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="SQLite.Generator-138"><a href="#SQLite.Generator-138"><span class="linenos">138</span></a>
</span><span id="SQLite.Generator-139"><a href="#SQLite.Generator-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
@ -723,6 +723,8 @@ represents a python time format and the output the target time format</li>
Default: "upper"</li>
<li><strong>alias_post_tablesample (bool):</strong> if the table alias comes after tablesample
Default: False</li>
<li><strong>identifiers_can_start_with_digit (bool):</strong> if an unquoted identifier can start with digit
Default: False</li>
<li><strong>unsupported_level (ErrorLevel):</strong> determines the generator's behavior when it encounters
unsupported expressions. Default ErrorLevel.WARN.</li>
<li><strong>null_ordering (str):</strong> Indicates the default null ordering method to use if not explicitly set.
@ -755,7 +757,7 @@ Default: True</li>
</div>
<a class="headerlink" href="#SQLite.Generator.cast_sql"></a>
<div class="pdoc-code codehilite"><pre><span></span><span id="SQLite.Generator.cast_sql-135"><a href="#SQLite.Generator.cast_sql-135"><span class="linenos">135</span></a> <span class="k">def</span> <span class="nf">cast_sql</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">expression</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Cast</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
</span><span id="SQLite.Generator.cast_sql-136"><a href="#SQLite.Generator.cast_sql-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">this</span> <span class="o">==</span> <span class="n">exp</span><span class="o">.</span><span class="n">DataType</span><span class="o">.</span><span class="n">Type</span><span class="o">.</span><span class="n">DATE</span><span class="p">:</span>
</span><span id="SQLite.Generator.cast_sql-136"><a href="#SQLite.Generator.cast_sql-136"><span class="linenos">136</span></a> <span class="k">if</span> <span class="n">expression</span><span class="o">.</span><span class="n">is_type</span><span class="p">(</span><span class="s2">&quot;date&quot;</span><span class="p">):</span>
</span><span id="SQLite.Generator.cast_sql-137"><a href="#SQLite.Generator.cast_sql-137"><span class="linenos">137</span></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="s2">&quot;DATE&quot;</span><span class="p">,</span> <span class="n">expression</span><span class="o">.</span><span class="n">this</span><span class="p">)</span>
</span><span id="SQLite.Generator.cast_sql-138"><a href="#SQLite.Generator.cast_sql-138"><span class="linenos">138</span></a>
</span><span id="SQLite.Generator.cast_sql-139"><a href="#SQLite.Generator.cast_sql-139"><span class="linenos">139</span></a> <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">cast_sql</span><span class="p">(</span><span class="n">expression</span><span class="p">)</span>
@ -1028,7 +1030,6 @@ Default: True</li>
<dd id="SQLite.Generator.check_sql" class="function"><a href="../generator.html#Generator.check_sql">check_sql</a></dd>
<dd id="SQLite.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
<dd id="SQLite.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
<dd id="SQLite.Generator.unique_sql" class="function"><a href="../generator.html#Generator.unique_sql">unique_sql</a></dd>
<dd id="SQLite.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
<dd id="SQLite.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="SQLite.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
@ -1119,6 +1120,9 @@ Default: True</li>
<dd id="SQLite.Generator.when_sql" class="function"><a href="../generator.html#Generator.when_sql">when_sql</a></dd>
<dd id="SQLite.Generator.merge_sql" class="function"><a href="../generator.html#Generator.merge_sql">merge_sql</a></dd>
<dd id="SQLite.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
<dd id="SQLite.Generator.dictproperty_sql" class="function"><a href="../generator.html#Generator.dictproperty_sql">dictproperty_sql</a></dd>
<dd id="SQLite.Generator.dictrange_sql" class="function"><a href="../generator.html#Generator.dictrange_sql">dictrange_sql</a></dd>
<dd id="SQLite.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
</div>
</dl>

View file

@ -221,7 +221,7 @@ a parsed syntax tree.</p>
<ul>
<li><strong>error_level:</strong> the desired error level.
Default: ErrorLevel.RAISE</li>
Default: ErrorLevel.IMMEDIATE</li>
<li><strong>error_message_context:</strong> determines the amount of context to capture from a
query string when displaying the error message (in number of characters).
Default: 50.</li>
@ -327,6 +327,8 @@ represents a python time format and the output the target time format</li>
Default: "upper"</li>
<li><strong>alias_post_tablesample (bool):</strong> if the table alias comes after tablesample
Default: False</li>
<li><strong>identifiers_can_start_with_digit (bool):</strong> if an unquoted identifier can start with digit
Default: False</li>
<li><strong>unsupported_level (ErrorLevel):</strong> determines the generator's behavior when it encounters
unsupported expressions. Default ErrorLevel.WARN.</li>
<li><strong>null_ordering (str):</strong> Indicates the default null ordering method to use if not explicitly set.
@ -490,7 +492,6 @@ Default: True</li>
<dd id="StarRocks.Generator.check_sql" class="function"><a href="../generator.html#Generator.check_sql">check_sql</a></dd>
<dd id="StarRocks.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
<dd id="StarRocks.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
<dd id="StarRocks.Generator.unique_sql" class="function"><a href="../generator.html#Generator.unique_sql">unique_sql</a></dd>
<dd id="StarRocks.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
<dd id="StarRocks.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="StarRocks.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
@ -583,6 +584,9 @@ Default: True</li>
<dd id="StarRocks.Generator.when_sql" class="function"><a href="../generator.html#Generator.when_sql">when_sql</a></dd>
<dd id="StarRocks.Generator.merge_sql" class="function"><a href="../generator.html#Generator.merge_sql">merge_sql</a></dd>
<dd id="StarRocks.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
<dd id="StarRocks.Generator.dictproperty_sql" class="function"><a href="../generator.html#Generator.dictproperty_sql">dictproperty_sql</a></dd>
<dd id="StarRocks.Generator.dictrange_sql" class="function"><a href="../generator.html#Generator.dictrange_sql">dictrange_sql</a></dd>
<dd id="StarRocks.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
</div>
<div><dt><a href="mysql.html#MySQL.Generator">sqlglot.dialects.mysql.MySQL.Generator</a></dt>

View file

@ -268,6 +268,8 @@ represents a python time format and the output the target time format</li>
Default: "upper"</li>
<li><strong>alias_post_tablesample (bool):</strong> if the table alias comes after tablesample
Default: False</li>
<li><strong>identifiers_can_start_with_digit (bool):</strong> if an unquoted identifier can start with digit
Default: False</li>
<li><strong>unsupported_level (ErrorLevel):</strong> determines the generator's behavior when it encounters
unsupported expressions. Default ErrorLevel.WARN.</li>
<li><strong>null_ordering (str):</strong> Indicates the default null ordering method to use if not explicitly set.
@ -494,7 +496,6 @@ Default: True</li>
<dd id="Tableau.Generator.check_sql" class="function"><a href="../generator.html#Generator.check_sql">check_sql</a></dd>
<dd id="Tableau.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
<dd id="Tableau.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
<dd id="Tableau.Generator.unique_sql" class="function"><a href="../generator.html#Generator.unique_sql">unique_sql</a></dd>
<dd id="Tableau.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="Tableau.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
<dd id="Tableau.Generator.jsonobject_sql" class="function"><a href="../generator.html#Generator.jsonobject_sql">jsonobject_sql</a></dd>
@ -586,6 +587,9 @@ Default: True</li>
<dd id="Tableau.Generator.when_sql" class="function"><a href="../generator.html#Generator.when_sql">when_sql</a></dd>
<dd id="Tableau.Generator.merge_sql" class="function"><a href="../generator.html#Generator.merge_sql">merge_sql</a></dd>
<dd id="Tableau.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
<dd id="Tableau.Generator.dictproperty_sql" class="function"><a href="../generator.html#Generator.dictproperty_sql">dictproperty_sql</a></dd>
<dd id="Tableau.Generator.dictrange_sql" class="function"><a href="../generator.html#Generator.dictrange_sql">dictrange_sql</a></dd>
<dd id="Tableau.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
</div>
</dl>
@ -617,7 +621,7 @@ a parsed syntax tree.</p>
<ul>
<li><strong>error_level:</strong> the desired error level.
Default: ErrorLevel.RAISE</li>
Default: ErrorLevel.IMMEDIATE</li>
<li><strong>error_message_context:</strong> determines the amount of context to capture from a
query string when displaying the error message (in number of characters).
Default: 50.</li>

View file

@ -236,7 +236,7 @@
</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">,</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">,</span>
</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a> <span class="p">}</span>
</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a>
@ -422,7 +422,7 @@
</span><span id="Teradata-143"><a href="#Teradata-143"><span class="linenos">143</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Teradata-144"><a href="#Teradata-144"><span class="linenos">144</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
</span><span id="Teradata-145"><a href="#Teradata-145"><span class="linenos">145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">,</span>
</span><span id="Teradata-146"><a href="#Teradata-146"><span class="linenos">146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">,</span>
</span><span id="Teradata-146"><a href="#Teradata-146"><span class="linenos">146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
</span><span id="Teradata-147"><a href="#Teradata-147"><span class="linenos">147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
</span><span id="Teradata-148"><a href="#Teradata-148"><span class="linenos">148</span></a> <span class="p">}</span>
</span><span id="Teradata-149"><a href="#Teradata-149"><span class="linenos">149</span></a>
@ -649,7 +649,7 @@ a parsed syntax tree.</p>
<ul>
<li><strong>error_level:</strong> the desired error level.
Default: ErrorLevel.RAISE</li>
Default: ErrorLevel.IMMEDIATE</li>
<li><strong>error_message_context:</strong> determines the amount of context to capture from a
query string when displaying the error message (in number of characters).
Default: 50.</li>
@ -707,7 +707,7 @@ Default: "nulls_are_small"</li>
</span><span id="Teradata.Generator-143"><a href="#Teradata.Generator-143"><span class="linenos">143</span></a> <span class="n">PROPERTIES_LOCATION</span> <span class="o">=</span> <span class="p">{</span>
</span><span id="Teradata.Generator-144"><a href="#Teradata.Generator-144"><span class="linenos">144</span></a> <span class="o">**</span><span class="n">generator</span><span class="o">.</span><span class="n">Generator</span><span class="o">.</span><span class="n">PROPERTIES_LOCATION</span><span class="p">,</span>
</span><span id="Teradata.Generator-145"><a href="#Teradata.Generator-145"><span class="linenos">145</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">OnCommitProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">,</span>
</span><span id="Teradata.Generator-146"><a href="#Teradata.Generator-146"><span class="linenos">146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_INDEX</span><span class="p">,</span>
</span><span id="Teradata.Generator-146"><a href="#Teradata.Generator-146"><span class="linenos">146</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">PartitionedByProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_EXPRESSION</span><span class="p">,</span>
</span><span id="Teradata.Generator-147"><a href="#Teradata.Generator-147"><span class="linenos">147</span></a> <span class="n">exp</span><span class="o">.</span><span class="n">StabilityProperty</span><span class="p">:</span> <span class="n">exp</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">Location</span><span class="o">.</span><span class="n">POST_CREATE</span><span class="p">,</span>
</span><span id="Teradata.Generator-148"><a href="#Teradata.Generator-148"><span class="linenos">148</span></a> <span class="p">}</span>
</span><span id="Teradata.Generator-149"><a href="#Teradata.Generator-149"><span class="linenos">149</span></a>
@ -783,6 +783,8 @@ represents a python time format and the output the target time format</li>
Default: "upper"</li>
<li><strong>alias_post_tablesample (bool):</strong> if the table alias comes after tablesample
Default: False</li>
<li><strong>identifiers_can_start_with_digit (bool):</strong> if an unquoted identifier can start with digit
Default: False</li>
<li><strong>unsupported_level (ErrorLevel):</strong> determines the generator's behavior when it encounters
unsupported expressions. Default ErrorLevel.WARN.</li>
<li><strong>null_ordering (str):</strong> Indicates the default null ordering method to use if not explicitly set.
@ -1051,7 +1053,6 @@ Default: True</li>
<dd id="Teradata.Generator.check_sql" class="function"><a href="../generator.html#Generator.check_sql">check_sql</a></dd>
<dd id="Teradata.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
<dd id="Teradata.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
<dd id="Teradata.Generator.unique_sql" class="function"><a href="../generator.html#Generator.unique_sql">unique_sql</a></dd>
<dd id="Teradata.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
<dd id="Teradata.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="Teradata.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
@ -1143,6 +1144,9 @@ Default: True</li>
<dd id="Teradata.Generator.when_sql" class="function"><a href="../generator.html#Generator.when_sql">when_sql</a></dd>
<dd id="Teradata.Generator.merge_sql" class="function"><a href="../generator.html#Generator.merge_sql">merge_sql</a></dd>
<dd id="Teradata.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
<dd id="Teradata.Generator.dictproperty_sql" class="function"><a href="../generator.html#Generator.dictproperty_sql">dictproperty_sql</a></dd>
<dd id="Teradata.Generator.dictrange_sql" class="function"><a href="../generator.html#Generator.dictrange_sql">dictrange_sql</a></dd>
<dd id="Teradata.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
</div>
</dl>

View file

@ -188,6 +188,8 @@ represents a python time format and the output the target time format</li>
Default: "upper"</li>
<li><strong>alias_post_tablesample (bool):</strong> if the table alias comes after tablesample
Default: False</li>
<li><strong>identifiers_can_start_with_digit (bool):</strong> if an unquoted identifier can start with digit
Default: False</li>
<li><strong>unsupported_level (ErrorLevel):</strong> determines the generator's behavior when it encounters
unsupported expressions. Default ErrorLevel.WARN.</li>
<li><strong>null_ordering (str):</strong> Indicates the default null ordering method to use if not explicitly set.
@ -351,7 +353,6 @@ Default: True</li>
<dd id="Trino.Generator.check_sql" class="function"><a href="../generator.html#Generator.check_sql">check_sql</a></dd>
<dd id="Trino.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
<dd id="Trino.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
<dd id="Trino.Generator.unique_sql" class="function"><a href="../generator.html#Generator.unique_sql">unique_sql</a></dd>
<dd id="Trino.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
<dd id="Trino.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="Trino.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
@ -442,6 +443,9 @@ Default: True</li>
<dd id="Trino.Generator.when_sql" class="function"><a href="../generator.html#Generator.when_sql">when_sql</a></dd>
<dd id="Trino.Generator.merge_sql" class="function"><a href="../generator.html#Generator.merge_sql">merge_sql</a></dd>
<dd id="Trino.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
<dd id="Trino.Generator.dictproperty_sql" class="function"><a href="../generator.html#Generator.dictproperty_sql">dictproperty_sql</a></dd>
<dd id="Trino.Generator.dictrange_sql" class="function"><a href="../generator.html#Generator.dictrange_sql">dictrange_sql</a></dd>
<dd id="Trino.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
</div>
<div><dt><a href="presto.html#Presto.Generator">sqlglot.dialects.presto.Presto.Generator</a></dt>

View file

@ -1277,7 +1277,7 @@ a parsed syntax tree.</p>
<ul>
<li><strong>error_level:</strong> the desired error level.
Default: ErrorLevel.RAISE</li>
Default: ErrorLevel.IMMEDIATE</li>
<li><strong>error_message_context:</strong> determines the amount of context to capture from a
query string when displaying the error message (in number of characters).
Default: 50.</li>
@ -1422,6 +1422,8 @@ represents a python time format and the output the target time format</li>
Default: "upper"</li>
<li><strong>alias_post_tablesample (bool):</strong> if the table alias comes after tablesample
Default: False</li>
<li><strong>identifiers_can_start_with_digit (bool):</strong> if an unquoted identifier can start with digit
Default: False</li>
<li><strong>unsupported_level (ErrorLevel):</strong> determines the generator's behavior when it encounters
unsupported expressions. Default ErrorLevel.WARN.</li>
<li><strong>null_ordering (str):</strong> Indicates the default null ordering method to use if not explicitly set.
@ -1657,7 +1659,6 @@ Default: True</li>
<dd id="TSQL.Generator.check_sql" class="function"><a href="../generator.html#Generator.check_sql">check_sql</a></dd>
<dd id="TSQL.Generator.foreignkey_sql" class="function"><a href="../generator.html#Generator.foreignkey_sql">foreignkey_sql</a></dd>
<dd id="TSQL.Generator.primarykey_sql" class="function"><a href="../generator.html#Generator.primarykey_sql">primarykey_sql</a></dd>
<dd id="TSQL.Generator.unique_sql" class="function"><a href="../generator.html#Generator.unique_sql">unique_sql</a></dd>
<dd id="TSQL.Generator.if_sql" class="function"><a href="../generator.html#Generator.if_sql">if_sql</a></dd>
<dd id="TSQL.Generator.matchagainst_sql" class="function"><a href="../generator.html#Generator.matchagainst_sql">matchagainst_sql</a></dd>
<dd id="TSQL.Generator.jsonkeyvalue_sql" class="function"><a href="../generator.html#Generator.jsonkeyvalue_sql">jsonkeyvalue_sql</a></dd>
@ -1750,6 +1751,9 @@ Default: True</li>
<dd id="TSQL.Generator.when_sql" class="function"><a href="../generator.html#Generator.when_sql">when_sql</a></dd>
<dd id="TSQL.Generator.merge_sql" class="function"><a href="../generator.html#Generator.merge_sql">merge_sql</a></dd>
<dd id="TSQL.Generator.tochar_sql" class="function"><a href="../generator.html#Generator.tochar_sql">tochar_sql</a></dd>
<dd id="TSQL.Generator.dictproperty_sql" class="function"><a href="../generator.html#Generator.dictproperty_sql">dictproperty_sql</a></dd>
<dd id="TSQL.Generator.dictrange_sql" class="function"><a href="../generator.html#Generator.dictrange_sql">dictrange_sql</a></dd>
<dd id="TSQL.Generator.dictsubproperty_sql" class="function"><a href="../generator.html#Generator.dictsubproperty_sql">dictsubproperty_sql</a></dd>
</div>
</dl>