Adding upstream version 26.9.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
4c394df415
commit
412e82cbc6
43 changed files with 27039 additions and 26675 deletions
File diff suppressed because one or more lines are too long
|
@ -84,8 +84,8 @@
|
|||
</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a><span class="n">__version_tuple__</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
|
||||
</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a><span class="n">version_tuple</span><span class="p">:</span> <span class="n">VERSION_TUPLE</span>
|
||||
</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a>
|
||||
</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">'26.7.0'</span>
|
||||
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a><span class="n">__version_tuple__</span> <span class="o">=</span> <span class="n">version_tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">26</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a><span class="n">__version__</span> <span class="o">=</span> <span class="n">version</span> <span class="o">=</span> <span class="s1">'26.8.0'</span>
|
||||
</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a><span class="n">__version_tuple__</span> <span class="o">=</span> <span class="n">version_tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">26</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -93,7 +93,7 @@
|
|||
<section id="__version__">
|
||||
<div class="attr variable">
|
||||
<span class="name">__version__</span><span class="annotation">: str</span> =
|
||||
<span class="default_value">'26.7.0'</span>
|
||||
<span class="default_value">'26.8.0'</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -105,7 +105,7 @@
|
|||
<section id="__version_tuple__">
|
||||
<div class="attr variable">
|
||||
<span class="name">__version_tuple__</span><span class="annotation">: object</span> =
|
||||
<span class="default_value">(26, 7, 0)</span>
|
||||
<span class="default_value">(26, 8, 0)</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -117,7 +117,7 @@
|
|||
<section id="version">
|
||||
<div class="attr variable">
|
||||
<span class="name">version</span><span class="annotation">: str</span> =
|
||||
<span class="default_value">'26.7.0'</span>
|
||||
<span class="default_value">'26.8.0'</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -129,7 +129,7 @@
|
|||
<section id="version_tuple">
|
||||
<div class="attr variable">
|
||||
<span class="name">version_tuple</span><span class="annotation">: object</span> =
|
||||
<span class="default_value">(26, 7, 0)</span>
|
||||
<span class="default_value">(26, 8, 0)</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -325,7 +325,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Athena">
|
||||
<div class="attr variable">
|
||||
<span class="name">Athena</span> =
|
||||
<span class="default_value"><MagicMock id='140462755349024'></span>
|
||||
<span class="default_value"><MagicMock id='140234444173472'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -337,7 +337,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="BigQuery">
|
||||
<div class="attr variable">
|
||||
<span class="name">BigQuery</span> =
|
||||
<span class="default_value"><MagicMock id='140462741502272'></span>
|
||||
<span class="default_value"><MagicMock id='140234434573840'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -349,7 +349,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="ClickHouse">
|
||||
<div class="attr variable">
|
||||
<span class="name">ClickHouse</span> =
|
||||
<span class="default_value"><MagicMock id='140462754762032'></span>
|
||||
<span class="default_value"><MagicMock id='140234434570672'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -361,7 +361,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Databricks">
|
||||
<div class="attr variable">
|
||||
<span class="name">Databricks</span> =
|
||||
<span class="default_value"><MagicMock id='140462742589632'></span>
|
||||
<span class="default_value"><MagicMock id='140234428888496'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -373,7 +373,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Doris">
|
||||
<div class="attr variable">
|
||||
<span class="name">Doris</span> =
|
||||
<span class="default_value"><MagicMock id='140462742590208'></span>
|
||||
<span class="default_value"><MagicMock id='140234427959280'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -385,7 +385,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Drill">
|
||||
<div class="attr variable">
|
||||
<span class="name">Drill</span> =
|
||||
<span class="default_value"><MagicMock id='140462740790416'></span>
|
||||
<span class="default_value"><MagicMock id='140234427969360'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -397,7 +397,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Druid">
|
||||
<div class="attr variable">
|
||||
<span class="name">Druid</span> =
|
||||
<span class="default_value"><MagicMock id='140462740798336'></span>
|
||||
<span class="default_value"><MagicMock id='140234428366560'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -409,7 +409,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="DuckDB">
|
||||
<div class="attr variable">
|
||||
<span class="name">DuckDB</span> =
|
||||
<span class="default_value"><MagicMock id='140462741187664'></span>
|
||||
<span class="default_value"><MagicMock id='140234428356288'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -421,7 +421,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Dune">
|
||||
<div class="attr variable">
|
||||
<span class="name">Dune</span> =
|
||||
<span class="default_value"><MagicMock id='140462745526160'></span>
|
||||
<span class="default_value"><MagicMock id='140234443818320'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -433,7 +433,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Hive">
|
||||
<div class="attr variable">
|
||||
<span class="name">Hive</span> =
|
||||
<span class="default_value"><MagicMock id='140462750759136'></span>
|
||||
<span class="default_value"><MagicMock id='140234443819328'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -445,7 +445,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Materialize">
|
||||
<div class="attr variable">
|
||||
<span class="name">Materialize</span> =
|
||||
<span class="default_value"><MagicMock id='140462751357952'></span>
|
||||
<span class="default_value"><MagicMock id='140234443765840'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -457,7 +457,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="MySQL">
|
||||
<div class="attr variable">
|
||||
<span class="name">MySQL</span> =
|
||||
<span class="default_value"><MagicMock id='140462751363424'></span>
|
||||
<span class="default_value"><MagicMock id='140234443756864'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -469,7 +469,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Oracle">
|
||||
<div class="attr variable">
|
||||
<span class="name">Oracle</span> =
|
||||
<span class="default_value"><MagicMock id='140462755217712'></span>
|
||||
<span class="default_value"><MagicMock id='140234443761904'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -481,7 +481,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Postgres">
|
||||
<div class="attr variable">
|
||||
<span class="name">Postgres</span> =
|
||||
<span class="default_value"><MagicMock id='140462755233024'></span>
|
||||
<span class="default_value"><MagicMock id='140234443680944'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -493,7 +493,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Presto">
|
||||
<div class="attr variable">
|
||||
<span class="name">Presto</span> =
|
||||
<span class="default_value"><MagicMock id='140462756443568'></span>
|
||||
<span class="default_value"><MagicMock id='140234443675808'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -505,7 +505,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="PRQL">
|
||||
<div class="attr variable">
|
||||
<span class="name">PRQL</span> =
|
||||
<span class="default_value"><MagicMock id='140462755122432'></span>
|
||||
<span class="default_value"><MagicMock id='140234442518112'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -517,7 +517,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Redshift">
|
||||
<div class="attr variable">
|
||||
<span class="name">Redshift</span> =
|
||||
<span class="default_value"><MagicMock id='140462755125120'></span>
|
||||
<span class="default_value"><MagicMock id='140234442511824'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -529,7 +529,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="RisingWave">
|
||||
<div class="attr variable">
|
||||
<span class="name">RisingWave</span> =
|
||||
<span class="default_value"><MagicMock id='140462756817904'></span>
|
||||
<span class="default_value"><MagicMock id='140234434918768'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -541,7 +541,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Snowflake">
|
||||
<div class="attr variable">
|
||||
<span class="name">Snowflake</span> =
|
||||
<span class="default_value"><MagicMock id='140462743195648'></span>
|
||||
<span class="default_value"><MagicMock id='140234443372672'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -553,7 +553,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Spark">
|
||||
<div class="attr variable">
|
||||
<span class="name">Spark</span> =
|
||||
<span class="default_value"><MagicMock id='140462755039024'></span>
|
||||
<span class="default_value"><MagicMock id='140234443373296'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -565,7 +565,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Spark2">
|
||||
<div class="attr variable">
|
||||
<span class="name">Spark2</span> =
|
||||
<span class="default_value"><MagicMock id='140462746722960'></span>
|
||||
<span class="default_value"><MagicMock id='140234430652496'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -577,7 +577,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="SQLite">
|
||||
<div class="attr variable">
|
||||
<span class="name">SQLite</span> =
|
||||
<span class="default_value"><MagicMock id='140462742002304'></span>
|
||||
<span class="default_value"><MagicMock id='140234445453776'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -589,7 +589,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="StarRocks">
|
||||
<div class="attr variable">
|
||||
<span class="name">StarRocks</span> =
|
||||
<span class="default_value"><MagicMock id='140462742011664'></span>
|
||||
<span class="default_value"><MagicMock id='140234443357104'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -601,7 +601,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Tableau">
|
||||
<div class="attr variable">
|
||||
<span class="name">Tableau</span> =
|
||||
<span class="default_value"><MagicMock id='140462741692736'></span>
|
||||
<span class="default_value"><MagicMock id='140234443351056'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -613,7 +613,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Teradata">
|
||||
<div class="attr variable">
|
||||
<span class="name">Teradata</span> =
|
||||
<span class="default_value"><MagicMock id='140462745788496'></span>
|
||||
<span class="default_value"><MagicMock id='140234428938992'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -625,7 +625,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Trino">
|
||||
<div class="attr variable">
|
||||
<span class="name">Trino</span> =
|
||||
<span class="default_value"><MagicMock id='140462753877488'></span>
|
||||
<span class="default_value"><MagicMock id='140234443896096'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -637,7 +637,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="TSQL">
|
||||
<div class="attr variable">
|
||||
<span class="name">TSQL</span> =
|
||||
<span class="default_value"><MagicMock id='140462753885648'></span>
|
||||
<span class="default_value"><MagicMock id='140234443893456'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -649,7 +649,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Dialect">
|
||||
<div class="attr variable">
|
||||
<span class="name">Dialect</span> =
|
||||
<span class="default_value"><MagicMock id='140462739461584'></span>
|
||||
<span class="default_value"><MagicMock id='140234426619200'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -661,7 +661,7 @@ dialect implementations in order to understand how their various components can
|
|||
<section id="Dialects">
|
||||
<div class="attr variable">
|
||||
<span class="name">Dialects</span> =
|
||||
<span class="default_value"><MagicMock id='140462739469504'></span>
|
||||
<span class="default_value"><MagicMock id='140234426627120'></span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
|
@ -1920,7 +1920,7 @@ belong to some totally-ordered set.</p>
|
|||
<section id="DATE_UNITS">
|
||||
<div class="attr variable">
|
||||
<span class="name">DATE_UNITS</span> =
|
||||
<span class="default_value">{'day', 'year_month', 'week', 'quarter', 'year', 'month'}</span>
|
||||
<span class="default_value">{'day', 'month', 'week', 'quarter', 'year_month', 'year'}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -581,7 +581,7 @@ queries if it would result in multiple table selects in a single query:</p>
|
|||
<div class="attr variable">
|
||||
<span class="name">UNMERGABLE_ARGS</span> =
|
||||
<input id="UNMERGABLE_ARGS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="UNMERGABLE_ARGS-view-value"></label><span class="default_value">{'sample', 'match', 'sort', 'locks', 'format', 'into', 'limit', 'offset', 'operation_modifiers', 'distinct', 'windows', 'having', 'laterals', 'settings', 'kind', 'distribute', 'connect', 'pivots', 'group', 'cluster', 'prewhere', 'options', 'qualify', 'with'}</span>
|
||||
<label class="view-value-button pdoc-button" for="UNMERGABLE_ARGS-view-value"></label><span class="default_value">{'operation_modifiers', 'qualify', 'distinct', 'sort', 'cluster', 'limit', 'having', 'connect', 'prewhere', 'match', 'sample', 'into', 'offset', 'settings', 'distribute', 'group', 'pivots', 'options', 'format', 'laterals', 'with', 'windows', 'kind', 'locks'}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -3238,7 +3238,7 @@ prefix are statically known.</p>
|
|||
<div class="attr variable">
|
||||
<span class="name">DATETRUNC_COMPARISONS</span> =
|
||||
<input id="DATETRUNC_COMPARISONS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="DATETRUNC_COMPARISONS-view-value"></label><span class="default_value">{<class '<a href="../expressions.html#In">sqlglot.expressions.In</a>'>, <class '<a href="../expressions.html#LT">sqlglot.expressions.LT</a>'>, <class '<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>'>, <class '<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>'>, <class '<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>'>, <class '<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>'>, <class '<a href="../expressions.html#GT">sqlglot.expressions.GT</a>'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="DATETRUNC_COMPARISONS-view-value"></label><span class="default_value">{<class '<a href="../expressions.html#GTE">sqlglot.expressions.GTE</a>'>, <class '<a href="../expressions.html#EQ">sqlglot.expressions.EQ</a>'>, <class '<a href="../expressions.html#LTE">sqlglot.expressions.LTE</a>'>, <class '<a href="../expressions.html#NEQ">sqlglot.expressions.NEQ</a>'>, <class '<a href="../expressions.html#GT">sqlglot.expressions.GT</a>'>, <class '<a href="../expressions.html#In">sqlglot.expressions.In</a>'>, <class '<a href="../expressions.html#LT">sqlglot.expressions.LT</a>'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
11684
docs/sqlglot/parser.html
11684
docs/sqlglot/parser.html
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -9347,7 +9347,7 @@
|
|||
<div class="attr variable">
|
||||
<span class="name">TOKENS_PRECEDING_HINT</span> =
|
||||
<input id="Tokenizer.TOKENS_PRECEDING_HINT-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="Tokenizer.TOKENS_PRECEDING_HINT-view-value"></label><span class="default_value">{<<a href="#TokenType.DELETE">TokenType.DELETE</a>: 'DELETE'>, <<a href="#TokenType.SELECT">TokenType.SELECT</a>: 'SELECT'>, <<a href="#TokenType.INSERT">TokenType.INSERT</a>: 'INSERT'>, <<a href="#TokenType.UPDATE">TokenType.UPDATE</a>: 'UPDATE'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="Tokenizer.TOKENS_PRECEDING_HINT-view-value"></label><span class="default_value">{<<a href="#TokenType.SELECT">TokenType.SELECT</a>: 'SELECT'>, <<a href="#TokenType.UPDATE">TokenType.UPDATE</a>: 'UPDATE'>, <<a href="#TokenType.INSERT">TokenType.INSERT</a>: 'INSERT'>, <<a href="#TokenType.DELETE">TokenType.DELETE</a>: 'DELETE'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
@ -9386,7 +9386,7 @@
|
|||
<div class="attr variable">
|
||||
<span class="name">COMMANDS</span> =
|
||||
<input id="Tokenizer.COMMANDS-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
|
||||
<label class="view-value-button pdoc-button" for="Tokenizer.COMMANDS-view-value"></label><span class="default_value">{<<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: 'COMMAND'>, <<a href="#TokenType.RENAME">TokenType.RENAME</a>: 'RENAME'>, <<a href="#TokenType.EXECUTE">TokenType.EXECUTE</a>: 'EXECUTE'>, <<a href="#TokenType.SHOW">TokenType.SHOW</a>: 'SHOW'>, <<a href="#TokenType.FETCH">TokenType.FETCH</a>: 'FETCH'>}</span>
|
||||
<label class="view-value-button pdoc-button" for="Tokenizer.COMMANDS-view-value"></label><span class="default_value">{<<a href="#TokenType.FETCH">TokenType.FETCH</a>: 'FETCH'>, <<a href="#TokenType.RENAME">TokenType.RENAME</a>: 'RENAME'>, <<a href="#TokenType.SHOW">TokenType.SHOW</a>: 'SHOW'>, <<a href="#TokenType.COMMAND">TokenType.COMMAND</a>: 'COMMAND'>, <<a href="#TokenType.EXECUTE">TokenType.EXECUTE</a>: 'EXECUTE'>}</span>
|
||||
|
||||
|
||||
</div>
|
||||
|
|
|
@ -1040,67 +1040,66 @@
|
|||
</span><span id="L-907"><a href="#L-907"><span class="linenos">907</span></a> <span class="nb">len</span><span class="p">(</span><span class="n">marked_column_tables</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span>
|
||||
</span><span id="L-908"><a href="#L-908"><span class="linenos">908</span></a> <span class="p">),</span> <span class="s2">"Columns of only a single table can be marked with (+) in a given binary predicate"</span>
|
||||
</span><span id="L-909"><a href="#L-909"><span class="linenos">909</span></a>
|
||||
</span><span id="L-910"><a href="#L-910"><span class="linenos">910</span></a> <span class="n">join_this</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">,</span> <span class="n">query_from</span><span class="p">)</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="L-911"><a href="#L-911"><span class="linenos">911</span></a> <span class="n">new_join</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">join_this</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="n">join_predicate</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">"LEFT"</span><span class="p">)</span>
|
||||
</span><span id="L-912"><a href="#L-912"><span class="linenos">912</span></a>
|
||||
</span><span id="L-913"><a href="#L-913"><span class="linenos">913</span></a> <span class="c1"># Upsert new_join into new_joins dictionary</span>
|
||||
</span><span id="L-914"><a href="#L-914"><span class="linenos">914</span></a> <span class="n">new_join_alias_or_name</span> <span class="o">=</span> <span class="n">new_join</span><span class="o">.</span><span class="n">alias_or_name</span>
|
||||
</span><span id="L-915"><a href="#L-915"><span class="linenos">915</span></a> <span class="n">existing_join</span> <span class="o">=</span> <span class="n">new_joins</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">new_join_alias_or_name</span><span class="p">)</span>
|
||||
</span><span id="L-916"><a href="#L-916"><span class="linenos">916</span></a> <span class="k">if</span> <span class="n">existing_join</span><span class="p">:</span>
|
||||
</span><span id="L-917"><a href="#L-917"><span class="linenos">917</span></a> <span class="n">existing_join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"on"</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="n">existing_join</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">"on"</span><span class="p">),</span> <span class="n">new_join</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"on"</span><span class="p">]))</span>
|
||||
</span><span id="L-918"><a href="#L-918"><span class="linenos">918</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-919"><a href="#L-919"><span class="linenos">919</span></a> <span class="n">new_joins</span><span class="p">[</span><span class="n">new_join_alias_or_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_join</span>
|
||||
</span><span id="L-920"><a href="#L-920"><span class="linenos">920</span></a>
|
||||
</span><span id="L-921"><a href="#L-921"><span class="linenos">921</span></a> <span class="c1"># If the parent of the target predicate is a binary node, then it now has only one child</span>
|
||||
</span><span id="L-922"><a href="#L-922"><span class="linenos">922</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">predicate_parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
|
||||
</span><span id="L-923"><a href="#L-923"><span class="linenos">923</span></a> <span class="k">if</span> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">left</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
</span><span id="L-924"><a href="#L-924"><span class="linenos">924</span></a> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">predicate_parent</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
|
||||
</span><span id="L-925"><a href="#L-925"><span class="linenos">925</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-926"><a href="#L-926"><span class="linenos">926</span></a> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">predicate_parent</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
|
||||
</span><span id="L-927"><a href="#L-927"><span class="linenos">927</span></a>
|
||||
</span><span id="L-928"><a href="#L-928"><span class="linenos">928</span></a> <span class="k">if</span> <span class="n">query_from</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="L-929"><a href="#L-929"><span class="linenos">929</span></a> <span class="n">only_old_joins</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="o">-</span> <span class="n">new_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
|
||||
</span><span id="L-930"><a href="#L-930"><span class="linenos">930</span></a> <span class="k">assert</span> <span class="p">(</span>
|
||||
</span><span id="L-931"><a href="#L-931"><span class="linenos">931</span></a> <span class="nb">len</span><span class="p">(</span><span class="n">only_old_joins</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">1</span>
|
||||
</span><span id="L-932"><a href="#L-932"><span class="linenos">932</span></a> <span class="p">),</span> <span class="s2">"Cannot determine which table to use in the new FROM clause"</span>
|
||||
</span><span id="L-933"><a href="#L-933"><span class="linenos">933</span></a>
|
||||
</span><span id="L-934"><a href="#L-934"><span class="linenos">934</span></a> <span class="n">new_from_name</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">only_old_joins</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
</span><span id="L-935"><a href="#L-935"><span class="linenos">935</span></a> <span class="n">query</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"from"</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">this</span><span class="o">=</span><span class="n">old_joins</span><span class="p">[</span><span class="n">new_from_name</span><span class="p">]</span><span class="o">.</span><span class="n">this</span><span class="p">))</span>
|
||||
</span><span id="L-936"><a href="#L-936"><span class="linenos">936</span></a>
|
||||
</span><span id="L-937"><a href="#L-937"><span class="linenos">937</span></a> <span class="k">if</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="L-938"><a href="#L-938"><span class="linenos">938</span></a> <span class="n">query</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">new_joins</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
|
||||
</span><span id="L-939"><a href="#L-939"><span class="linenos">939</span></a>
|
||||
</span><span id="L-940"><a href="#L-940"><span class="linenos">940</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">where</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
|
||||
</span><span id="L-941"><a href="#L-941"><span class="linenos">941</span></a> <span class="n">where</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||
</span><span id="L-942"><a href="#L-942"><span class="linenos">942</span></a>
|
||||
</span><span id="L-943"><a href="#L-943"><span class="linenos">943</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-910"><a href="#L-910"><span class="linenos">910</span></a> <span class="c1"># Add predicate if join already copied, or add join if it is new</span>
|
||||
</span><span id="L-911"><a href="#L-911"><span class="linenos">911</span></a> <span class="n">join_this</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">,</span> <span class="n">query_from</span><span class="p">)</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="L-912"><a href="#L-912"><span class="linenos">912</span></a> <span class="n">existing_join</span> <span class="o">=</span> <span class="n">new_joins</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">join_this</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
|
||||
</span><span id="L-913"><a href="#L-913"><span class="linenos">913</span></a> <span class="k">if</span> <span class="n">existing_join</span><span class="p">:</span>
|
||||
</span><span id="L-914"><a href="#L-914"><span class="linenos">914</span></a> <span class="n">existing_join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"on"</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="n">existing_join</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"on"</span><span class="p">],</span> <span class="n">join_predicate</span><span class="p">))</span>
|
||||
</span><span id="L-915"><a href="#L-915"><span class="linenos">915</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-916"><a href="#L-916"><span class="linenos">916</span></a> <span class="n">new_joins</span><span class="p">[</span><span class="n">join_this</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">(</span>
|
||||
</span><span id="L-917"><a href="#L-917"><span class="linenos">917</span></a> <span class="n">this</span><span class="o">=</span><span class="n">join_this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">on</span><span class="o">=</span><span class="n">join_predicate</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">"LEFT"</span>
|
||||
</span><span id="L-918"><a href="#L-918"><span class="linenos">918</span></a> <span class="p">)</span>
|
||||
</span><span id="L-919"><a href="#L-919"><span class="linenos">919</span></a>
|
||||
</span><span id="L-920"><a href="#L-920"><span class="linenos">920</span></a> <span class="c1"># If the parent of the target predicate is a binary node, then it now has only one child</span>
|
||||
</span><span id="L-921"><a href="#L-921"><span class="linenos">921</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">predicate_parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
|
||||
</span><span id="L-922"><a href="#L-922"><span class="linenos">922</span></a> <span class="k">if</span> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">left</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
</span><span id="L-923"><a href="#L-923"><span class="linenos">923</span></a> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">predicate_parent</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
|
||||
</span><span id="L-924"><a href="#L-924"><span class="linenos">924</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="L-925"><a href="#L-925"><span class="linenos">925</span></a> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">predicate_parent</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
|
||||
</span><span id="L-926"><a href="#L-926"><span class="linenos">926</span></a>
|
||||
</span><span id="L-927"><a href="#L-927"><span class="linenos">927</span></a> <span class="k">if</span> <span class="n">query_from</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="L-928"><a href="#L-928"><span class="linenos">928</span></a> <span class="n">only_old_joins</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="o">-</span> <span class="n">new_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
|
||||
</span><span id="L-929"><a href="#L-929"><span class="linenos">929</span></a> <span class="k">assert</span> <span class="p">(</span>
|
||||
</span><span id="L-930"><a href="#L-930"><span class="linenos">930</span></a> <span class="nb">len</span><span class="p">(</span><span class="n">only_old_joins</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">1</span>
|
||||
</span><span id="L-931"><a href="#L-931"><span class="linenos">931</span></a> <span class="p">),</span> <span class="s2">"Cannot determine which table to use in the new FROM clause"</span>
|
||||
</span><span id="L-932"><a href="#L-932"><span class="linenos">932</span></a>
|
||||
</span><span id="L-933"><a href="#L-933"><span class="linenos">933</span></a> <span class="n">new_from_name</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">only_old_joins</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
</span><span id="L-934"><a href="#L-934"><span class="linenos">934</span></a> <span class="n">query</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"from"</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">this</span><span class="o">=</span><span class="n">old_joins</span><span class="p">[</span><span class="n">new_from_name</span><span class="p">]</span><span class="o">.</span><span class="n">this</span><span class="p">))</span>
|
||||
</span><span id="L-935"><a href="#L-935"><span class="linenos">935</span></a>
|
||||
</span><span id="L-936"><a href="#L-936"><span class="linenos">936</span></a> <span class="k">if</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="L-937"><a href="#L-937"><span class="linenos">937</span></a> <span class="n">query</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">new_joins</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
|
||||
</span><span id="L-938"><a href="#L-938"><span class="linenos">938</span></a>
|
||||
</span><span id="L-939"><a href="#L-939"><span class="linenos">939</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">where</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
|
||||
</span><span id="L-940"><a href="#L-940"><span class="linenos">940</span></a> <span class="n">where</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||
</span><span id="L-941"><a href="#L-941"><span class="linenos">941</span></a>
|
||||
</span><span id="L-942"><a href="#L-942"><span class="linenos">942</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-943"><a href="#L-943"><span class="linenos">943</span></a>
|
||||
</span><span id="L-944"><a href="#L-944"><span class="linenos">944</span></a>
|
||||
</span><span id="L-945"><a href="#L-945"><span class="linenos">945</span></a>
|
||||
</span><span id="L-946"><a href="#L-946"><span class="linenos">946</span></a><span class="k">def</span><span class="w"> </span><span class="nf">any_to_exists</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">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
||||
</span><span id="L-947"><a href="#L-947"><span class="linenos">947</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-948"><a href="#L-948"><span class="linenos">948</span></a><span class="sd"> Transform ANY operator to Spark's EXISTS</span>
|
||||
</span><span id="L-949"><a href="#L-949"><span class="linenos">949</span></a>
|
||||
</span><span id="L-950"><a href="#L-950"><span class="linenos">950</span></a><span class="sd"> For example,</span>
|
||||
</span><span id="L-951"><a href="#L-951"><span class="linenos">951</span></a><span class="sd"> - Postgres: SELECT * FROM tbl WHERE 5 > ANY(tbl.col)</span>
|
||||
</span><span id="L-952"><a href="#L-952"><span class="linenos">952</span></a><span class="sd"> - Spark: SELECT * FROM tbl WHERE EXISTS(tbl.col, x -> x < 5)</span>
|
||||
</span><span id="L-953"><a href="#L-953"><span class="linenos">953</span></a>
|
||||
</span><span id="L-954"><a href="#L-954"><span class="linenos">954</span></a><span class="sd"> Both ANY and EXISTS accept queries but currently only array expressions are supported for this</span>
|
||||
</span><span id="L-955"><a href="#L-955"><span class="linenos">955</span></a><span class="sd"> transformation</span>
|
||||
</span><span id="L-956"><a href="#L-956"><span class="linenos">956</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-957"><a href="#L-957"><span class="linenos">957</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
|
||||
</span><span id="L-958"><a href="#L-958"><span class="linenos">958</span></a> <span class="k">for</span> <span class="nb">any</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
|
||||
</span><span id="L-959"><a href="#L-959"><span class="linenos">959</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="L-960"><a href="#L-960"><span class="linenos">960</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">):</span>
|
||||
</span><span id="L-961"><a href="#L-961"><span class="linenos">961</span></a> <span class="k">continue</span>
|
||||
</span><span id="L-962"><a href="#L-962"><span class="linenos">962</span></a>
|
||||
</span><span id="L-963"><a href="#L-963"><span class="linenos">963</span></a> <span class="n">binop</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="L-964"><a href="#L-964"><span class="linenos">964</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">binop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
|
||||
</span><span id="L-965"><a href="#L-965"><span class="linenos">965</span></a> <span class="n">lambda_arg</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">"x"</span><span class="p">)</span>
|
||||
</span><span id="L-966"><a href="#L-966"><span class="linenos">966</span></a> <span class="nb">any</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">lambda_arg</span><span class="p">)</span>
|
||||
</span><span id="L-967"><a href="#L-967"><span class="linenos">967</span></a> <span class="n">lambda_expr</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">binop</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">lambda_arg</span><span class="p">])</span>
|
||||
</span><span id="L-968"><a href="#L-968"><span class="linenos">968</span></a> <span class="n">binop</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Exists</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">lambda_expr</span><span class="p">))</span>
|
||||
</span><span id="L-969"><a href="#L-969"><span class="linenos">969</span></a>
|
||||
</span><span id="L-970"><a href="#L-970"><span class="linenos">970</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="L-945"><a href="#L-945"><span class="linenos">945</span></a><span class="k">def</span><span class="w"> </span><span class="nf">any_to_exists</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">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
||||
</span><span id="L-946"><a href="#L-946"><span class="linenos">946</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="L-947"><a href="#L-947"><span class="linenos">947</span></a><span class="sd"> Transform ANY operator to Spark's EXISTS</span>
|
||||
</span><span id="L-948"><a href="#L-948"><span class="linenos">948</span></a>
|
||||
</span><span id="L-949"><a href="#L-949"><span class="linenos">949</span></a><span class="sd"> For example,</span>
|
||||
</span><span id="L-950"><a href="#L-950"><span class="linenos">950</span></a><span class="sd"> - Postgres: SELECT * FROM tbl WHERE 5 > ANY(tbl.col)</span>
|
||||
</span><span id="L-951"><a href="#L-951"><span class="linenos">951</span></a><span class="sd"> - Spark: SELECT * FROM tbl WHERE EXISTS(tbl.col, x -> x < 5)</span>
|
||||
</span><span id="L-952"><a href="#L-952"><span class="linenos">952</span></a>
|
||||
</span><span id="L-953"><a href="#L-953"><span class="linenos">953</span></a><span class="sd"> Both ANY and EXISTS accept queries but currently only array expressions are supported for this</span>
|
||||
</span><span id="L-954"><a href="#L-954"><span class="linenos">954</span></a><span class="sd"> transformation</span>
|
||||
</span><span id="L-955"><a href="#L-955"><span class="linenos">955</span></a><span class="sd"> """</span>
|
||||
</span><span id="L-956"><a href="#L-956"><span class="linenos">956</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
|
||||
</span><span id="L-957"><a href="#L-957"><span class="linenos">957</span></a> <span class="k">for</span> <span class="nb">any</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
|
||||
</span><span id="L-958"><a href="#L-958"><span class="linenos">958</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="L-959"><a href="#L-959"><span class="linenos">959</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">):</span>
|
||||
</span><span id="L-960"><a href="#L-960"><span class="linenos">960</span></a> <span class="k">continue</span>
|
||||
</span><span id="L-961"><a href="#L-961"><span class="linenos">961</span></a>
|
||||
</span><span id="L-962"><a href="#L-962"><span class="linenos">962</span></a> <span class="n">binop</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="L-963"><a href="#L-963"><span class="linenos">963</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">binop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
|
||||
</span><span id="L-964"><a href="#L-964"><span class="linenos">964</span></a> <span class="n">lambda_arg</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">"x"</span><span class="p">)</span>
|
||||
</span><span id="L-965"><a href="#L-965"><span class="linenos">965</span></a> <span class="nb">any</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">lambda_arg</span><span class="p">)</span>
|
||||
</span><span id="L-966"><a href="#L-966"><span class="linenos">966</span></a> <span class="n">lambda_expr</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">binop</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">lambda_arg</span><span class="p">])</span>
|
||||
</span><span id="L-967"><a href="#L-967"><span class="linenos">967</span></a> <span class="n">binop</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Exists</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">lambda_expr</span><span class="p">))</span>
|
||||
</span><span id="L-968"><a href="#L-968"><span class="linenos">968</span></a>
|
||||
</span><span id="L-969"><a href="#L-969"><span class="linenos">969</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -2488,40 +2487,39 @@ The corresponding columns are removed from the create statement.</p>
|
|||
</span><span id="eliminate_join_marks-908"><a href="#eliminate_join_marks-908"><span class="linenos">908</span></a> <span class="nb">len</span><span class="p">(</span><span class="n">marked_column_tables</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span>
|
||||
</span><span id="eliminate_join_marks-909"><a href="#eliminate_join_marks-909"><span class="linenos">909</span></a> <span class="p">),</span> <span class="s2">"Columns of only a single table can be marked with (+) in a given binary predicate"</span>
|
||||
</span><span id="eliminate_join_marks-910"><a href="#eliminate_join_marks-910"><span class="linenos">910</span></a>
|
||||
</span><span id="eliminate_join_marks-911"><a href="#eliminate_join_marks-911"><span class="linenos">911</span></a> <span class="n">join_this</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">,</span> <span class="n">query_from</span><span class="p">)</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="eliminate_join_marks-912"><a href="#eliminate_join_marks-912"><span class="linenos">912</span></a> <span class="n">new_join</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">join_this</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="n">join_predicate</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s2">"LEFT"</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-913"><a href="#eliminate_join_marks-913"><span class="linenos">913</span></a>
|
||||
</span><span id="eliminate_join_marks-914"><a href="#eliminate_join_marks-914"><span class="linenos">914</span></a> <span class="c1"># Upsert new_join into new_joins dictionary</span>
|
||||
</span><span id="eliminate_join_marks-915"><a href="#eliminate_join_marks-915"><span class="linenos">915</span></a> <span class="n">new_join_alias_or_name</span> <span class="o">=</span> <span class="n">new_join</span><span class="o">.</span><span class="n">alias_or_name</span>
|
||||
</span><span id="eliminate_join_marks-916"><a href="#eliminate_join_marks-916"><span class="linenos">916</span></a> <span class="n">existing_join</span> <span class="o">=</span> <span class="n">new_joins</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">new_join_alias_or_name</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-917"><a href="#eliminate_join_marks-917"><span class="linenos">917</span></a> <span class="k">if</span> <span class="n">existing_join</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-918"><a href="#eliminate_join_marks-918"><span class="linenos">918</span></a> <span class="n">existing_join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"on"</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="n">existing_join</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">"on"</span><span class="p">),</span> <span class="n">new_join</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"on"</span><span class="p">]))</span>
|
||||
</span><span id="eliminate_join_marks-919"><a href="#eliminate_join_marks-919"><span class="linenos">919</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-920"><a href="#eliminate_join_marks-920"><span class="linenos">920</span></a> <span class="n">new_joins</span><span class="p">[</span><span class="n">new_join_alias_or_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_join</span>
|
||||
</span><span id="eliminate_join_marks-921"><a href="#eliminate_join_marks-921"><span class="linenos">921</span></a>
|
||||
</span><span id="eliminate_join_marks-922"><a href="#eliminate_join_marks-922"><span class="linenos">922</span></a> <span class="c1"># If the parent of the target predicate is a binary node, then it now has only one child</span>
|
||||
</span><span id="eliminate_join_marks-923"><a href="#eliminate_join_marks-923"><span class="linenos">923</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">predicate_parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
|
||||
</span><span id="eliminate_join_marks-924"><a href="#eliminate_join_marks-924"><span class="linenos">924</span></a> <span class="k">if</span> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">left</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-925"><a href="#eliminate_join_marks-925"><span class="linenos">925</span></a> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">predicate_parent</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-926"><a href="#eliminate_join_marks-926"><span class="linenos">926</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-927"><a href="#eliminate_join_marks-927"><span class="linenos">927</span></a> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">predicate_parent</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-928"><a href="#eliminate_join_marks-928"><span class="linenos">928</span></a>
|
||||
</span><span id="eliminate_join_marks-929"><a href="#eliminate_join_marks-929"><span class="linenos">929</span></a> <span class="k">if</span> <span class="n">query_from</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-930"><a href="#eliminate_join_marks-930"><span class="linenos">930</span></a> <span class="n">only_old_joins</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="o">-</span> <span class="n">new_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
|
||||
</span><span id="eliminate_join_marks-931"><a href="#eliminate_join_marks-931"><span class="linenos">931</span></a> <span class="k">assert</span> <span class="p">(</span>
|
||||
</span><span id="eliminate_join_marks-932"><a href="#eliminate_join_marks-932"><span class="linenos">932</span></a> <span class="nb">len</span><span class="p">(</span><span class="n">only_old_joins</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">1</span>
|
||||
</span><span id="eliminate_join_marks-933"><a href="#eliminate_join_marks-933"><span class="linenos">933</span></a> <span class="p">),</span> <span class="s2">"Cannot determine which table to use in the new FROM clause"</span>
|
||||
</span><span id="eliminate_join_marks-934"><a href="#eliminate_join_marks-934"><span class="linenos">934</span></a>
|
||||
</span><span id="eliminate_join_marks-935"><a href="#eliminate_join_marks-935"><span class="linenos">935</span></a> <span class="n">new_from_name</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">only_old_joins</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
</span><span id="eliminate_join_marks-936"><a href="#eliminate_join_marks-936"><span class="linenos">936</span></a> <span class="n">query</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"from"</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">this</span><span class="o">=</span><span class="n">old_joins</span><span class="p">[</span><span class="n">new_from_name</span><span class="p">]</span><span class="o">.</span><span class="n">this</span><span class="p">))</span>
|
||||
</span><span id="eliminate_join_marks-937"><a href="#eliminate_join_marks-937"><span class="linenos">937</span></a>
|
||||
</span><span id="eliminate_join_marks-938"><a href="#eliminate_join_marks-938"><span class="linenos">938</span></a> <span class="k">if</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-939"><a href="#eliminate_join_marks-939"><span class="linenos">939</span></a> <span class="n">query</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">new_joins</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
|
||||
</span><span id="eliminate_join_marks-940"><a href="#eliminate_join_marks-940"><span class="linenos">940</span></a>
|
||||
</span><span id="eliminate_join_marks-941"><a href="#eliminate_join_marks-941"><span class="linenos">941</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">where</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-942"><a href="#eliminate_join_marks-942"><span class="linenos">942</span></a> <span class="n">where</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||
</span><span id="eliminate_join_marks-943"><a href="#eliminate_join_marks-943"><span class="linenos">943</span></a>
|
||||
</span><span id="eliminate_join_marks-944"><a href="#eliminate_join_marks-944"><span class="linenos">944</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span><span id="eliminate_join_marks-911"><a href="#eliminate_join_marks-911"><span class="linenos">911</span></a> <span class="c1"># Add predicate if join already copied, or add join if it is new</span>
|
||||
</span><span id="eliminate_join_marks-912"><a href="#eliminate_join_marks-912"><span class="linenos">912</span></a> <span class="n">join_this</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">col</span><span class="o">.</span><span class="n">table</span><span class="p">,</span> <span class="n">query_from</span><span class="p">)</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="eliminate_join_marks-913"><a href="#eliminate_join_marks-913"><span class="linenos">913</span></a> <span class="n">existing_join</span> <span class="o">=</span> <span class="n">new_joins</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">join_this</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-914"><a href="#eliminate_join_marks-914"><span class="linenos">914</span></a> <span class="k">if</span> <span class="n">existing_join</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-915"><a href="#eliminate_join_marks-915"><span class="linenos">915</span></a> <span class="n">existing_join</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"on"</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">and_</span><span class="p">(</span><span class="n">existing_join</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="s2">"on"</span><span class="p">],</span> <span class="n">join_predicate</span><span class="p">))</span>
|
||||
</span><span id="eliminate_join_marks-916"><a href="#eliminate_join_marks-916"><span class="linenos">916</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-917"><a href="#eliminate_join_marks-917"><span class="linenos">917</span></a> <span class="n">new_joins</span><span class="p">[</span><span class="n">join_this</span><span class="o">.</span><span class="n">alias_or_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Join</span><span class="p">(</span>
|
||||
</span><span id="eliminate_join_marks-918"><a href="#eliminate_join_marks-918"><span class="linenos">918</span></a> <span class="n">this</span><span class="o">=</span><span class="n">join_this</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">on</span><span class="o">=</span><span class="n">join_predicate</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">kind</span><span class="o">=</span><span class="s2">"LEFT"</span>
|
||||
</span><span id="eliminate_join_marks-919"><a href="#eliminate_join_marks-919"><span class="linenos">919</span></a> <span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-920"><a href="#eliminate_join_marks-920"><span class="linenos">920</span></a>
|
||||
</span><span id="eliminate_join_marks-921"><a href="#eliminate_join_marks-921"><span class="linenos">921</span></a> <span class="c1"># If the parent of the target predicate is a binary node, then it now has only one child</span>
|
||||
</span><span id="eliminate_join_marks-922"><a href="#eliminate_join_marks-922"><span class="linenos">922</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">predicate_parent</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
|
||||
</span><span id="eliminate_join_marks-923"><a href="#eliminate_join_marks-923"><span class="linenos">923</span></a> <span class="k">if</span> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">left</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-924"><a href="#eliminate_join_marks-924"><span class="linenos">924</span></a> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">predicate_parent</span><span class="o">.</span><span class="n">right</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-925"><a href="#eliminate_join_marks-925"><span class="linenos">925</span></a> <span class="k">else</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-926"><a href="#eliminate_join_marks-926"><span class="linenos">926</span></a> <span class="n">predicate_parent</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">predicate_parent</span><span class="o">.</span><span class="n">left</span><span class="p">)</span>
|
||||
</span><span id="eliminate_join_marks-927"><a href="#eliminate_join_marks-927"><span class="linenos">927</span></a>
|
||||
</span><span id="eliminate_join_marks-928"><a href="#eliminate_join_marks-928"><span class="linenos">928</span></a> <span class="k">if</span> <span class="n">query_from</span><span class="o">.</span><span class="n">alias_or_name</span> <span class="ow">in</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-929"><a href="#eliminate_join_marks-929"><span class="linenos">929</span></a> <span class="n">only_old_joins</span> <span class="o">=</span> <span class="n">old_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="o">-</span> <span class="n">new_joins</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
|
||||
</span><span id="eliminate_join_marks-930"><a href="#eliminate_join_marks-930"><span class="linenos">930</span></a> <span class="k">assert</span> <span class="p">(</span>
|
||||
</span><span id="eliminate_join_marks-931"><a href="#eliminate_join_marks-931"><span class="linenos">931</span></a> <span class="nb">len</span><span class="p">(</span><span class="n">only_old_joins</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">1</span>
|
||||
</span><span id="eliminate_join_marks-932"><a href="#eliminate_join_marks-932"><span class="linenos">932</span></a> <span class="p">),</span> <span class="s2">"Cannot determine which table to use in the new FROM clause"</span>
|
||||
</span><span id="eliminate_join_marks-933"><a href="#eliminate_join_marks-933"><span class="linenos">933</span></a>
|
||||
</span><span id="eliminate_join_marks-934"><a href="#eliminate_join_marks-934"><span class="linenos">934</span></a> <span class="n">new_from_name</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">only_old_joins</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||
</span><span id="eliminate_join_marks-935"><a href="#eliminate_join_marks-935"><span class="linenos">935</span></a> <span class="n">query</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"from"</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">this</span><span class="o">=</span><span class="n">old_joins</span><span class="p">[</span><span class="n">new_from_name</span><span class="p">]</span><span class="o">.</span><span class="n">this</span><span class="p">))</span>
|
||||
</span><span id="eliminate_join_marks-936"><a href="#eliminate_join_marks-936"><span class="linenos">936</span></a>
|
||||
</span><span id="eliminate_join_marks-937"><a href="#eliminate_join_marks-937"><span class="linenos">937</span></a> <span class="k">if</span> <span class="n">new_joins</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-938"><a href="#eliminate_join_marks-938"><span class="linenos">938</span></a> <span class="n">query</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"joins"</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">new_joins</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
|
||||
</span><span id="eliminate_join_marks-939"><a href="#eliminate_join_marks-939"><span class="linenos">939</span></a>
|
||||
</span><span id="eliminate_join_marks-940"><a href="#eliminate_join_marks-940"><span class="linenos">940</span></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">where</span><span class="o">.</span><span class="n">this</span><span class="p">:</span>
|
||||
</span><span id="eliminate_join_marks-941"><a href="#eliminate_join_marks-941"><span class="linenos">941</span></a> <span class="n">where</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
|
||||
</span><span id="eliminate_join_marks-942"><a href="#eliminate_join_marks-942"><span class="linenos">942</span></a>
|
||||
</span><span id="eliminate_join_marks-943"><a href="#eliminate_join_marks-943"><span class="linenos">943</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
@ -2558,31 +2556,31 @@ If this does not hold for a query, consider running <code><a href="optimizer/qua
|
|||
|
||||
</div>
|
||||
<a class="headerlink" href="#any_to_exists"></a>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="any_to_exists-947"><a href="#any_to_exists-947"><span class="linenos">947</span></a><span class="k">def</span><span class="w"> </span><span class="nf">any_to_exists</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">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
||||
</span><span id="any_to_exists-948"><a href="#any_to_exists-948"><span class="linenos">948</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="any_to_exists-949"><a href="#any_to_exists-949"><span class="linenos">949</span></a><span class="sd"> Transform ANY operator to Spark's EXISTS</span>
|
||||
</span><span id="any_to_exists-950"><a href="#any_to_exists-950"><span class="linenos">950</span></a>
|
||||
</span><span id="any_to_exists-951"><a href="#any_to_exists-951"><span class="linenos">951</span></a><span class="sd"> For example,</span>
|
||||
</span><span id="any_to_exists-952"><a href="#any_to_exists-952"><span class="linenos">952</span></a><span class="sd"> - Postgres: SELECT * FROM tbl WHERE 5 > ANY(tbl.col)</span>
|
||||
</span><span id="any_to_exists-953"><a href="#any_to_exists-953"><span class="linenos">953</span></a><span class="sd"> - Spark: SELECT * FROM tbl WHERE EXISTS(tbl.col, x -> x < 5)</span>
|
||||
</span><span id="any_to_exists-954"><a href="#any_to_exists-954"><span class="linenos">954</span></a>
|
||||
</span><span id="any_to_exists-955"><a href="#any_to_exists-955"><span class="linenos">955</span></a><span class="sd"> Both ANY and EXISTS accept queries but currently only array expressions are supported for this</span>
|
||||
</span><span id="any_to_exists-956"><a href="#any_to_exists-956"><span class="linenos">956</span></a><span class="sd"> transformation</span>
|
||||
</span><span id="any_to_exists-957"><a href="#any_to_exists-957"><span class="linenos">957</span></a><span class="sd"> """</span>
|
||||
</span><span id="any_to_exists-958"><a href="#any_to_exists-958"><span class="linenos">958</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
|
||||
</span><span id="any_to_exists-959"><a href="#any_to_exists-959"><span class="linenos">959</span></a> <span class="k">for</span> <span class="nb">any</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
|
||||
</span><span id="any_to_exists-960"><a href="#any_to_exists-960"><span class="linenos">960</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="any_to_exists-961"><a href="#any_to_exists-961"><span class="linenos">961</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">):</span>
|
||||
</span><span id="any_to_exists-962"><a href="#any_to_exists-962"><span class="linenos">962</span></a> <span class="k">continue</span>
|
||||
</span><span id="any_to_exists-963"><a href="#any_to_exists-963"><span class="linenos">963</span></a>
|
||||
</span><span id="any_to_exists-964"><a href="#any_to_exists-964"><span class="linenos">964</span></a> <span class="n">binop</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="any_to_exists-965"><a href="#any_to_exists-965"><span class="linenos">965</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">binop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
|
||||
</span><span id="any_to_exists-966"><a href="#any_to_exists-966"><span class="linenos">966</span></a> <span class="n">lambda_arg</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">"x"</span><span class="p">)</span>
|
||||
</span><span id="any_to_exists-967"><a href="#any_to_exists-967"><span class="linenos">967</span></a> <span class="nb">any</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">lambda_arg</span><span class="p">)</span>
|
||||
</span><span id="any_to_exists-968"><a href="#any_to_exists-968"><span class="linenos">968</span></a> <span class="n">lambda_expr</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">binop</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">lambda_arg</span><span class="p">])</span>
|
||||
</span><span id="any_to_exists-969"><a href="#any_to_exists-969"><span class="linenos">969</span></a> <span class="n">binop</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Exists</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">lambda_expr</span><span class="p">))</span>
|
||||
</span><span id="any_to_exists-970"><a href="#any_to_exists-970"><span class="linenos">970</span></a>
|
||||
</span><span id="any_to_exists-971"><a href="#any_to_exists-971"><span class="linenos">971</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
<div class="pdoc-code codehilite"><pre><span></span><span id="any_to_exists-946"><a href="#any_to_exists-946"><span class="linenos">946</span></a><span class="k">def</span><span class="w"> </span><span class="nf">any_to_exists</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">Expression</span><span class="p">)</span> <span class="o">-></span> <span class="n">exp</span><span class="o">.</span><span class="n">Expression</span><span class="p">:</span>
|
||||
</span><span id="any_to_exists-947"><a href="#any_to_exists-947"><span class="linenos">947</span></a><span class="w"> </span><span class="sd">"""</span>
|
||||
</span><span id="any_to_exists-948"><a href="#any_to_exists-948"><span class="linenos">948</span></a><span class="sd"> Transform ANY operator to Spark's EXISTS</span>
|
||||
</span><span id="any_to_exists-949"><a href="#any_to_exists-949"><span class="linenos">949</span></a>
|
||||
</span><span id="any_to_exists-950"><a href="#any_to_exists-950"><span class="linenos">950</span></a><span class="sd"> For example,</span>
|
||||
</span><span id="any_to_exists-951"><a href="#any_to_exists-951"><span class="linenos">951</span></a><span class="sd"> - Postgres: SELECT * FROM tbl WHERE 5 > ANY(tbl.col)</span>
|
||||
</span><span id="any_to_exists-952"><a href="#any_to_exists-952"><span class="linenos">952</span></a><span class="sd"> - Spark: SELECT * FROM tbl WHERE EXISTS(tbl.col, x -> x < 5)</span>
|
||||
</span><span id="any_to_exists-953"><a href="#any_to_exists-953"><span class="linenos">953</span></a>
|
||||
</span><span id="any_to_exists-954"><a href="#any_to_exists-954"><span class="linenos">954</span></a><span class="sd"> Both ANY and EXISTS accept queries but currently only array expressions are supported for this</span>
|
||||
</span><span id="any_to_exists-955"><a href="#any_to_exists-955"><span class="linenos">955</span></a><span class="sd"> transformation</span>
|
||||
</span><span id="any_to_exists-956"><a href="#any_to_exists-956"><span class="linenos">956</span></a><span class="sd"> """</span>
|
||||
</span><span id="any_to_exists-957"><a href="#any_to_exists-957"><span class="linenos">957</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">expression</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
|
||||
</span><span id="any_to_exists-958"><a href="#any_to_exists-958"><span class="linenos">958</span></a> <span class="k">for</span> <span class="nb">any</span> <span class="ow">in</span> <span class="n">expression</span><span class="o">.</span><span class="n">find_all</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Any</span><span class="p">):</span>
|
||||
</span><span id="any_to_exists-959"><a href="#any_to_exists-959"><span class="linenos">959</span></a> <span class="n">this</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">this</span>
|
||||
</span><span id="any_to_exists-960"><a href="#any_to_exists-960"><span class="linenos">960</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">this</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Query</span><span class="p">):</span>
|
||||
</span><span id="any_to_exists-961"><a href="#any_to_exists-961"><span class="linenos">961</span></a> <span class="k">continue</span>
|
||||
</span><span id="any_to_exists-962"><a href="#any_to_exists-962"><span class="linenos">962</span></a>
|
||||
</span><span id="any_to_exists-963"><a href="#any_to_exists-963"><span class="linenos">963</span></a> <span class="n">binop</span> <span class="o">=</span> <span class="nb">any</span><span class="o">.</span><span class="n">parent</span>
|
||||
</span><span id="any_to_exists-964"><a href="#any_to_exists-964"><span class="linenos">964</span></a> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">binop</span><span class="p">,</span> <span class="n">exp</span><span class="o">.</span><span class="n">Binary</span><span class="p">):</span>
|
||||
</span><span id="any_to_exists-965"><a href="#any_to_exists-965"><span class="linenos">965</span></a> <span class="n">lambda_arg</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">to_identifier</span><span class="p">(</span><span class="s2">"x"</span><span class="p">)</span>
|
||||
</span><span id="any_to_exists-966"><a href="#any_to_exists-966"><span class="linenos">966</span></a> <span class="nb">any</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">lambda_arg</span><span class="p">)</span>
|
||||
</span><span id="any_to_exists-967"><a href="#any_to_exists-967"><span class="linenos">967</span></a> <span class="n">lambda_expr</span> <span class="o">=</span> <span class="n">exp</span><span class="o">.</span><span class="n">Lambda</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">binop</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">expressions</span><span class="o">=</span><span class="p">[</span><span class="n">lambda_arg</span><span class="p">])</span>
|
||||
</span><span id="any_to_exists-968"><a href="#any_to_exists-968"><span class="linenos">968</span></a> <span class="n">binop</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">exp</span><span class="o">.</span><span class="n">Exists</span><span class="p">(</span><span class="n">this</span><span class="o">=</span><span class="n">this</span><span class="o">.</span><span class="n">unnest</span><span class="p">(),</span> <span class="n">expression</span><span class="o">=</span><span class="n">lambda_expr</span><span class="p">))</span>
|
||||
</span><span id="any_to_exists-969"><a href="#any_to_exists-969"><span class="linenos">969</span></a>
|
||||
</span><span id="any_to_exists-970"><a href="#any_to_exists-970"><span class="linenos">970</span></a> <span class="k">return</span> <span class="n">expression</span>
|
||||
</span></pre></div>
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue