diff options
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/delete.out | 27 | ||||
| -rw-r--r-- | src/test/regress/expected/rowtypes.out | 3 | ||||
| -rw-r--r-- | src/test/regress/expected/update.out | 25 | ||||
| -rw-r--r-- | src/test/regress/parallel_schedule | 2 | ||||
| -rw-r--r-- | src/test/regress/serial_schedule | 3 | ||||
| -rw-r--r-- | src/test/regress/sql/delete.sql | 22 | ||||
| -rw-r--r-- | src/test/regress/sql/rowtypes.sql | 3 | ||||
| -rw-r--r-- | src/test/regress/sql/update.sql | 16 |
8 files changed, 99 insertions, 2 deletions
diff --git a/src/test/regress/expected/delete.out b/src/test/regress/expected/delete.out new file mode 100644 index 0000000000..68128f69d0 --- /dev/null +++ b/src/test/regress/expected/delete.out @@ -0,0 +1,27 @@ +CREATE TABLE delete_test ( + id SERIAL PRIMARY KEY, + a INT +); +NOTICE: CREATE TABLE will create implicit sequence "delete_test_id_seq" for serial column "delete_test.id" +NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "delete_test_pkey" for table "delete_test" +INSERT INTO delete_test (a) VALUES (10); +INSERT INTO delete_test (a) VALUES (50); +INSERT INTO delete_test (a) VALUES (100); +-- allow an alias to be specified for DELETE's target table +DELETE FROM delete_test AS dt WHERE dt.a > 75; +-- if an alias is specified, don't allow the original table name +-- to be referenced +BEGIN; +SET LOCAL add_missing_from = false; +DELETE FROM delete_test dt WHERE delete_test.a > 25; +ERROR: invalid reference to FROM-clause entry for table "delete_test" +HINT: Perhaps you meant to reference the table alias "dt". +ROLLBACK; +SELECT * FROM delete_test; + id | a +----+---- + 1 | 10 + 2 | 50 +(2 rows) + +DROP TABLE delete_test; diff --git a/src/test/regress/expected/rowtypes.out b/src/test/regress/expected/rowtypes.out index fc46dd14e1..c6b1bfac39 100644 --- a/src/test/regress/expected/rowtypes.out +++ b/src/test/regress/expected/rowtypes.out @@ -59,8 +59,11 @@ select * from quadtable; 2 | ("(,4.4)","(5.5,6.6)") (2 rows) +begin; +set local add_missing_from = false; select f1, q.c1 from quadtable; -- fails, q is a table reference ERROR: missing FROM-clause entry for table "q" +rollback; select f1, (q).c1, (qq.q).c1.i from quadtable qq; f1 | c1 | i ----+-----------+----- diff --git a/src/test/regress/expected/update.out b/src/test/regress/expected/update.out index 3fca2fb41a..1ff7c8918f 100644 --- a/src/test/regress/expected/update.out +++ b/src/test/regress/expected/update.out @@ -22,4 +22,29 @@ SELECT * FROM update_test; 10 | (2 rows) +-- aliases for the UPDATE target table +UPDATE update_test AS t SET b = 10 WHERE t.a = 10; +SELECT * FROM update_test; + a | b +----+---- + 10 | 10 + 10 | 10 +(2 rows) + +UPDATE update_test t SET b = t.b + 10 WHERE t.a = 10; +SELECT * FROM update_test; + a | b +----+---- + 10 | 20 + 10 | 20 +(2 rows) + +-- if an alias for the target table is specified, don't allow references +-- to the original table name +BEGIN; +SET LOCAL add_missing_from = false; +UPDATE update_test AS t SET b = update_test.b + 10 WHERE t.a = 10; +ERROR: invalid reference to FROM-clause entry for table "update_test" +HINT: Perhaps you meant to reference the table alias "t". +ROLLBACK; DROP TABLE update_test; diff --git a/src/test/regress/parallel_schedule b/src/test/regress/parallel_schedule index d5777794bf..fef609711b 100644 --- a/src/test/regress/parallel_schedule +++ b/src/test/regress/parallel_schedule @@ -60,7 +60,7 @@ ignore: random # ---------- # The fourth group of parallel test # ---------- -test: select_into select_distinct select_distinct_on select_implicit select_having subselect union case join aggregates transactions random portals arrays btree_index hash_index update namespace prepared_xacts +test: select_into select_distinct select_distinct_on select_implicit select_having subselect union case join aggregates transactions random portals arrays btree_index hash_index update namespace prepared_xacts delete test: privileges test: misc diff --git a/src/test/regress/serial_schedule b/src/test/regress/serial_schedule index dd60070433..3342dc2ba1 100644 --- a/src/test/regress/serial_schedule +++ b/src/test/regress/serial_schedule @@ -1,4 +1,4 @@ -# $PostgreSQL: pgsql/src/test/regress/serial_schedule,v 1.29 2005/11/19 17:39:45 adunstan Exp $ +# $PostgreSQL: pgsql/src/test/regress/serial_schedule,v 1.30 2006/01/22 05:20:34 neilc Exp $ # This should probably be in an order similar to parallel_schedule. test: boolean test: char @@ -74,6 +74,7 @@ test: arrays test: btree_index test: hash_index test: update +test: delete test: namespace test: prepared_xacts test: privileges diff --git a/src/test/regress/sql/delete.sql b/src/test/regress/sql/delete.sql new file mode 100644 index 0000000000..86cabfcf64 --- /dev/null +++ b/src/test/regress/sql/delete.sql @@ -0,0 +1,22 @@ +CREATE TABLE delete_test ( + id SERIAL PRIMARY KEY, + a INT +); + +INSERT INTO delete_test (a) VALUES (10); +INSERT INTO delete_test (a) VALUES (50); +INSERT INTO delete_test (a) VALUES (100); + +-- allow an alias to be specified for DELETE's target table +DELETE FROM delete_test AS dt WHERE dt.a > 75; + +-- if an alias is specified, don't allow the original table name +-- to be referenced +BEGIN; +SET LOCAL add_missing_from = false; +DELETE FROM delete_test dt WHERE delete_test.a > 25; +ROLLBACK; + +SELECT * FROM delete_test; + +DROP TABLE delete_test;
\ No newline at end of file diff --git a/src/test/regress/sql/rowtypes.sql b/src/test/regress/sql/rowtypes.sql index 613c4e91f9..43d57bc603 100644 --- a/src/test/regress/sql/rowtypes.sql +++ b/src/test/regress/sql/rowtypes.sql @@ -35,7 +35,10 @@ insert into quadtable values (2, ((null,4.4),(5.5,6.6))); select * from quadtable; +begin; +set local add_missing_from = false; select f1, q.c1 from quadtable; -- fails, q is a table reference +rollback; select f1, (q).c1, (qq.q).c1.i from quadtable qq; diff --git a/src/test/regress/sql/update.sql b/src/test/regress/sql/update.sql index 577596abb1..99fd74bca7 100644 --- a/src/test/regress/sql/update.sql +++ b/src/test/regress/sql/update.sql @@ -16,4 +16,20 @@ UPDATE update_test SET a = DEFAULT, b = DEFAULT; SELECT * FROM update_test; +-- aliases for the UPDATE target table +UPDATE update_test AS t SET b = 10 WHERE t.a = 10; + +SELECT * FROM update_test; + +UPDATE update_test t SET b = t.b + 10 WHERE t.a = 10; + +SELECT * FROM update_test; + +-- if an alias for the target table is specified, don't allow references +-- to the original table name +BEGIN; +SET LOCAL add_missing_from = false; +UPDATE update_test AS t SET b = update_test.b + 10 WHERE t.a = 10; +ROLLBACK; + DROP TABLE update_test; |
