--echo # Test for REPLACE...RETURNING CREATE TABLE t1(id1 INT PRIMARY KEY, val1 VARCHAR(1)); CREATE TABLE t2(id2 INT PRIMARY KEY, val2 VARCHAR(1)); INSERT INTO t2 VALUES (1,'a'),(2,'b'),(3,'c'); DELIMITER |; CREATE FUNCTION f(arg INT) RETURNS INT BEGIN RETURN (SELECT arg+arg); END| DELIMITER ;| --echo # --echo # Simple replace statement...RETURNING --echo # REPLACE INTO t1 (id1, val1) VALUES (1, 'a'); REPLACE INTO t1 (id1, val1) VALUES (1, 'b') RETURNING *; REPLACE INTO t1 (id1, val1) VALUES (1, 'c') RETURNING id1+id1 AS total, id1&&id1, id1|id1,UPPER(val1),f(id1); REPLACE INTO t1(id1,val1) VALUES (1,'d') RETURNING (SELECT GROUP_CONCAT(val2) FROM t2 WHERE id2=1); REPLACE INTO t1(id1,val1) VALUES(1,'e') RETURNING (SELECT GROUP_CONCAT(val2) FROM t2 GROUP BY id2 HAVING id2=id2+1); PREPARE stmt FROM "REPLACE INTO t1 (id1,val1) VALUES (1,'f') RETURNING id1,(SELECT id2 FROM t2 WHERE val2='b')"; EXECUTE stmt; DEALLOCATE PREPARE stmt; SELECT * FROM t1; TRUNCATE TABLE t1; --echo # --echo # Multiple values in one replace statement...RETURNING --echo # REPLACE INTO t1 VALUES (1,'a'),(2,'b'); REPLACE INTO t1 VALUES (1,'c'),(2,'d') RETURNING *; REPLACE INTO t1 VALUES (1,'e'),(2,'f') RETURNING id1+id1 AS total, id1&&id1, id1|id1,UPPER(val1),f(id1); REPLACE INTO t1 VALUES (1,'o'),(2,'p') RETURNING (SELECT GROUP_CONCAT(val2) FROM t2 WHERE id2=1); REPLACE INTO t1 VALUES (1,'q'),(2,'r') RETURNING (SELECT GROUP_CONCAT(val2) FROM t2 GROUP BY id2 HAVING id2=id2+1); PREPARE stmt FROM "REPLACE INTO t1 VALUES (1,'s'),(2,'t') RETURNING id1, (SELECT id2 FROM t2 WHERE val2='b')"; EXECUTE stmt; DEALLOCATE PREPARE stmt; SELECT * FROM t1; TRUNCATE TABLE t1; --echo # --echo # REPLACE...SET...RETURNING --echo # REPLACE INTO t1 SET id1=1, val1 = 'a'; REPLACE INTO t1 SET id1=2, val1 = 'b' RETURNING *; REPLACE INTO t1 SET id1=3, val1 = 'c' RETURNING id1+id1 AS total, id1&&id1, id1|id1,UPPER(val1),f(id1); REPLACE INTO t1 SET id1=1, val1 = 'i' RETURNING (SELECT GROUP_CONCAT(val2) FROM t2 WHERE id2=1); REPLACE INTO t1 SET id1=2, val1='j' RETURNING (SELECT GROUP_CONCAT(val2) FROM t2 GROUP BY id2 HAVING id2=id2+1); PREPARE stmt FROM "REPLACE INTO t1 SET id1=3, val1='k' RETURNING id1, (SELECT id2 FROM t2 WHERE val2='b')"; EXECUTE stmt; DEALLOCATE PREPARE stmt; SELECT * FROM t1; --echo # --echo # REPLACE...SELECT...RETURNING --echo # TRUNCATE TABLE t2; REPLACE INTO t2(id2,val2) SELECT * FROM t1; REPLACE INTO t2 SELECT * FROM t1 WHERE id1=1 RETURNING *; REPLACE INTO t2 SELECT * FROM t1 WHERE id1=2 RETURNING id2+id2 AS total, id2&&id2, id2|id2,UPPER(val2),f(id2); REPLACE INTO t2 SELECT * FROM t1 WHERE id1=3 RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 WHERE id1=1); REPLACE INTO t2 SELECT * FROM t1 WHERE id1=1 RETURNING (SELECT GROUP_CONCAT(val1) FROM t1 GROUP BY id1 HAVING id1=id1+1); PREPARE stmt FROM "REPLACE INTO t2 SELECT * FROM t1 WHERE id1=2 RETURNING id2,(SELECT id1 FROM t1 WHERE val1='b')"; EXECUTE stmt; DEALLOCATE PREPARE stmt; REPLACE INTO t2 SELECT * FROM t1 WHERE id1=3 RETURNING (SELECT id1+id2 FROM t1 WHERE id1=1); REPLACE INTO t2 SELECT * FROM t1 WHERE id1=1 RETURNING (SELECT id1+id2 FROM t2 WHERE id2=0); SELECT * FROM t2; DROP TABLE t1; DROP TABLE t2; DROP FUNCTION f;