mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-13 01:47:05 +08:00
Code review for UPDATE SET (columnlist) patch. Make it handle as much
of the syntax as this fundamentally dead-end approach can, in particular combinations of single and multi column assignments. Improve rather inadequate documentation and provide some regression tests.
This commit is contained in:
@ -1,14 +1,15 @@
|
||||
--
|
||||
-- UPDATE ... SET <col> = DEFAULT;
|
||||
-- UPDATE syntax tests
|
||||
--
|
||||
|
||||
CREATE TABLE update_test (
|
||||
a INT DEFAULT 10,
|
||||
b INT
|
||||
b INT,
|
||||
c TEXT
|
||||
);
|
||||
|
||||
INSERT INTO update_test VALUES (5, 10);
|
||||
INSERT INTO update_test VALUES (10, 15);
|
||||
INSERT INTO update_test VALUES (5, 10, 'foo');
|
||||
INSERT INTO update_test(b, a) VALUES (15, 10);
|
||||
|
||||
SELECT * FROM update_test;
|
||||
|
||||
@ -30,10 +31,25 @@ SELECT * FROM update_test;
|
||||
--
|
||||
|
||||
UPDATE update_test SET a=v.i FROM (VALUES(100, 20)) AS v(i, j)
|
||||
WHERE update_test.b = v.j;
|
||||
WHERE update_test.b = v.j;
|
||||
|
||||
SELECT * FROM update_test;
|
||||
|
||||
--
|
||||
-- Test multiple-set-clause syntax
|
||||
--
|
||||
|
||||
UPDATE update_test SET (c,b,a) = ('bugle', b+11, DEFAULT) WHERE c = 'foo';
|
||||
SELECT * FROM update_test;
|
||||
UPDATE update_test SET (c,b) = ('car', a+b), a = a + 1 WHERE a = 10;
|
||||
SELECT * FROM update_test;
|
||||
-- fail, multi assignment to same column:
|
||||
UPDATE update_test SET (c,b) = ('car', a+b), b = a + 1 WHERE a = 10;
|
||||
|
||||
-- XXX this should work, but doesn't yet:
|
||||
UPDATE update_test SET (a,b) = (select a,b FROM update_test where c = 'foo')
|
||||
WHERE a = 10;
|
||||
|
||||
-- if an alias for the target table is specified, don't allow references
|
||||
-- to the original table name
|
||||
BEGIN;
|
||||
|
||||
Reference in New Issue
Block a user