diff options
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/regress/expected/update.out | 18 | ||||
-rw-r--r-- | src/test/regress/sql/update.sql | 9 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/test/regress/expected/update.out b/src/test/regress/expected/update.out index adc1fd7c394..49730ea3c55 100644 --- a/src/test/regress/expected/update.out +++ b/src/test/regress/expected/update.out @@ -56,6 +56,13 @@ SELECT * FROM update_test; 100 | 20 | (2 rows) +-- fail, wrong data type: +UPDATE update_test SET a = v.* FROM (VALUES(100, 20)) AS v(i, j) + WHERE update_test.b = v.j; +ERROR: column "a" is of type integer but expression is of type record +LINE 1: UPDATE update_test SET a = v.* FROM (VALUES(100, 20)) AS v(i... + ^ +HINT: You will need to rewrite or cast the expression. -- -- Test multiple-set-clause syntax -- @@ -133,6 +140,17 @@ SELECT * FROM update_test; | | (4 rows) +-- these should work, but don't yet: +UPDATE update_test SET (a,b) = (v.*) FROM (VALUES(21, 100)) AS v(i, j) + WHERE update_test.a = v.i; +ERROR: number of columns does not match number of values +LINE 1: UPDATE update_test SET (a,b) = (v.*) FROM (VALUES(21, 100)) ... + ^ +UPDATE update_test SET (a,b) = ROW(v.*) FROM (VALUES(21, 101)) AS v(i, j) + WHERE update_test.a = v.i; +ERROR: syntax error at or near "ROW" +LINE 1: UPDATE update_test SET (a,b) = ROW(v.*) FROM (VALUES(21, 101... + ^ -- if an alias for the target table is specified, don't allow references -- to the original table name UPDATE update_test AS t SET b = update_test.b + 10 WHERE t.a = 10; diff --git a/src/test/regress/sql/update.sql b/src/test/regress/sql/update.sql index 5637c68acf7..e0cf5d12a92 100644 --- a/src/test/regress/sql/update.sql +++ b/src/test/regress/sql/update.sql @@ -40,6 +40,10 @@ UPDATE update_test SET a=v.i FROM (VALUES(100, 20)) AS v(i, j) SELECT * FROM update_test; +-- fail, wrong data type: +UPDATE update_test SET a = v.* FROM (VALUES(100, 20)) AS v(i, j) + WHERE update_test.b = v.j; + -- -- Test multiple-set-clause syntax -- @@ -70,6 +74,11 @@ UPDATE update_test SET (b,a) = (select a+1,b from update_test); UPDATE update_test SET (b,a) = (select a+1,b from update_test where a = 1000) WHERE a = 11; SELECT * FROM update_test; +-- these should work, but don't yet: +UPDATE update_test SET (a,b) = (v.*) FROM (VALUES(21, 100)) AS v(i, j) + WHERE update_test.a = v.i; +UPDATE update_test SET (a,b) = ROW(v.*) FROM (VALUES(21, 101)) AS v(i, j) + WHERE update_test.a = v.i; -- if an alias for the target table is specified, don't allow references -- to the original table name |