Details
-
New Feature
-
Status: Stalled (View Workflow)
-
Major
-
Resolution: Unresolved
-
Sprint 7 (07.04.2025), Q4/2025 Server Development
Description
Add an UPDATE operation that returns a result set of the changed rows to the client.
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name |
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... |
[WHERE where_condition] |
[ORDER BY ...] |
[LIMIT row_count]
|
RETURNING select_expr [, select_expr ...]
|
I'm not exactly sure how the corresponding multiple-table syntax should look like, or if it is possible at all. But already having it for single-table updates would be a nice feature.
Other databases:
- PostgreSQL: uses RETURNING, returns new values
- Oracle: ditto
- SQL Server: uses OUTPUT and inserted. or deleted. prefixes for columns to return new/old values.
Our options:
Supposedly, we want to be Oracle and PostgreSQL compatible while being able to return old column values too.
UPDATE ... RETURNING NEW.col as new_col, OLD.col as old_col; |
UPDATE ... RETURNING col as new_col, VALUE(col) as old_col; |
UPDATE ... RETURNING col as new_col, OLD_VALUE(col) as old_col; |
First option. How to extend it for multi-update, should it be NEW.t1.col or t1.NEW.col ? What is UPDATE ... RETURNING is inside a trigger, how to parse NEW/OLD there?
Second option. VALUE already exists, not meaningful inside ODKU, so free to use. But not intuitively readable. Particularly in INSERT ... ON DUPLICATE KEY UPDATE col=VALUES(col) RETURNING VALUES(col).
Third option. New keyword, new function, only meaningful inside UPDATE RETURNING. But fairly readable without consulting the manual.
Attachments
Issue Links
- blocks
-
MDEV-12326 Implement multiple-table UPDATE/DELETE returning a result set
-
- Open
-
- duplicates
-
MDEV-19093 [Feature] Issue #48 SELECT...FROM UPDATE
-
- Closed
-
- is duplicated by
-
MDEV-33940 Support for UPDATE...RETURNING
-
- Closed
-
- relates to
-
MDEV-27013 COM_STMT_PREPARE returns 0 columns for DELETE/REPLACE/INSERT ... RETURNING ...
-
- Stalled
-
-
MDEV-30737 REPLACE...RETURNING should provide access to the old row data
-
- Open
-
-
MDEV-32516 Returning Insert Resultset into Temporary Table
-
- Open
-
-
MDEV-3814 Implement DELETE with result set (mwl #205)
-
- Closed
-
-
MDEV-10422 INSERT RETURNING
-
- Closed
-
-
MDEV-12326 Implement multiple-table UPDATE/DELETE returning a result set
-
- Open
-
-
MDEV-20033 sql_mode="oracle" does not support INSERT INTO ... RETURNING
-
- Closed
-
-
MDEV-34723 NEW and OLD in a trigger as row variables
-
- In Progress
-