[ 
https://issues.apache.org/jira/browse/SPARK-58966?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated SPARK-58966:
-----------------------------------
    Labels: pull-request-available  (was: )

> SQL variables cannot be used in UPDATE or MERGE INTO statements
> ---------------------------------------------------------------
>
>                 Key: SPARK-58966
>                 URL: https://issues.apache.org/jira/browse/SPARK-58966
>             Project: Spark
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 5.0.0
>            Reporter: Joel Robin
>            Priority: Major
>              Labels: pull-request-available
>
> SQL variables declared with DECLARE cannot be referenced anywhere in an 
> UPDATE or MERGE INTO statement against a table that uses Spark's built-in 
> DataSource V2 row-level operation framework. They resolve correctly in INSERT 
> and DELETE, so the restriction is inconsistent and undocumented.
>  
> SPARK-57260 fixed the same root cause for the REPLACE WHERE clause of INSERT 
> INTO. It is still present in every clause of UPDATE and MERGE INTO.
> h2. Reproduction
> Reproduced on master (commit b51665875a3) using the built-in 
> InMemoryRowLevelOperationTableCatalog:
> {noformat}
>   DELETE ... WHERE dep = var                        -> WORKS
>   INSERT ... REPLACE WHERE dep = var                -> WORKS   (SPARK-57260)
>   UPDATE ... WHERE dep = var                        -> FAILS
>   UPDATE ... SET salary = var                       -> FAILS
>   MERGE ... ON t.pk = s.pk AND t.dep = var          -> FAILS
>   MERGE ... WHEN MATCHED AND s.salary < var         -> FAILS
>   MERGE ... WHEN NOT MATCHED BY SOURCE AND t.x > var -> FAILS
>   MERGE ... WHEN MATCHED THEN UPDATE SET col = var  -> FAILS
>   MERGE ... WHEN NOT MATCHED THEN INSERT VALUES (var) -> FAILS
> {noformat}
> Every failure is:
> {noformat}
> [UNRESOLVED_COLUMN.WITH_SUGGESTION] A column, variable, or function parameter 
> with name `v_dep` cannot be resolved. Did you mean one of the following? 
> [`dep`, `pk`, `salary`]. SQLSTATE: 42703 
> {noformat}
> Note the message itself offers "A column, {*}variable{*}, or function 
> parameter", i.e. the analyzer reports that variable resolution was attempted. 
> The same failure occurs for SQL scripting local variables:
> {code:sql}
>   BEGIN
>     DECLARE lv STRING DEFAULT 'hr';
>     UPDATE t SET salary = 5 WHERE dep = lv;
>   END
> {code}
> h2. Scope
> This affects connectors that rely on Spark's built-in resolution of 
> UpdateTable and MergeIntoTable. Delta is NOT affected because it supplies its 
> own analyzer rules for UPDATE/MERGE and never reaches the code below; 
> consequently this does not reproduce on Delta tables. Apache Iceberg is 
> expected to be affected since it uses the built-in row-level operation 
> framework, but I have not verified Iceberg directly.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to