From 97e83468513399039878e4a630d577c8b7f5b2db Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Mon, 25 Apr 2011 09:46:53 -0400 Subject: [PATCH] Regression tests for TOAST. Kevin Grittner, per discussion of bug #5989 --- src/test/regress/expected/delete.out | 23 ++++++++++++++++------- src/test/regress/expected/insert.out | 17 +++++++++++++++++ src/test/regress/expected/update.out | 9 +++++++++ src/test/regress/sql/delete.sql | 12 +++++++++--- src/test/regress/sql/insert.sql | 7 +++++++ src/test/regress/sql/update.sql | 4 ++++ 6 files changed, 62 insertions(+), 10 deletions(-) diff --git a/src/test/regress/expected/delete.out b/src/test/regress/expected/delete.out index 604d067f22..d3d1a357c0 100644 --- a/src/test/regress/expected/delete.out +++ b/src/test/regress/expected/delete.out @@ -1,11 +1,12 @@ CREATE TABLE delete_test ( id SERIAL PRIMARY KEY, - a INT + a INT, + b text ); 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, b) VALUES (50, repeat('x', 10000)); 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; @@ -16,11 +17,19 @@ ERROR: invalid reference to FROM-clause entry for table "delete_test" LINE 1: DELETE FROM delete_test dt WHERE delete_test.a > 25; ^ HINT: Perhaps you meant to reference the table alias "dt". -SELECT * FROM delete_test; - id | a -----+---- - 1 | 10 - 2 | 50 +SELECT id, a, char_length(b) FROM delete_test; + id | a | char_length +----+----+------------- + 1 | 10 | + 2 | 50 | 10000 (2 rows) +-- delete a row with a TOASTed value +DELETE FROM delete_test WHERE a > 25; +SELECT id, a, char_length(b) FROM delete_test; + id | a | char_length +----+----+------------- + 1 | 10 | +(1 row) + DROP TABLE delete_test; diff --git a/src/test/regress/expected/insert.out b/src/test/regress/expected/insert.out index d8510ea334..50bcead449 100644 --- a/src/test/regress/expected/insert.out +++ b/src/test/regress/expected/insert.out @@ -62,4 +62,21 @@ select * from inserttest; 2 | 3 | values are fun! (7 rows) +-- +-- TOASTed value test +-- +insert into inserttest values(30, 50, repeat('x', 10000)); +select col1, col2, char_length(col3) from inserttest; + col1 | col2 | char_length +------+------+------------- + | 3 | 7 + | 5 | 7 + | 5 | 4 + | 7 | 7 + 10 | 20 | 2 + -1 | 2 | 7 + 2 | 3 | 15 + 30 | 50 | 10000 +(8 rows) + drop table inserttest; diff --git a/src/test/regress/expected/update.out b/src/test/regress/expected/update.out index 02aeccc735..71b856f95c 100644 --- a/src/test/regress/expected/update.out +++ b/src/test/regress/expected/update.out @@ -87,4 +87,13 @@ ERROR: invalid reference to FROM-clause entry for table "update_test" LINE 1: UPDATE update_test AS t SET b = update_test.b + 10 WHERE t.a... ^ HINT: Perhaps you meant to reference the table alias "t". +-- Make sure that we can update to a TOASTed value. +UPDATE update_test SET c = repeat('x', 10000) WHERE c = 'car'; +SELECT a, b, char_length(c) FROM update_test; + a | b | char_length +-----+----+------------- + 100 | 20 | + 11 | 41 | 10000 +(2 rows) + DROP TABLE update_test; diff --git a/src/test/regress/sql/delete.sql b/src/test/regress/sql/delete.sql index 6b870bbbd5..d8cb99e93c 100644 --- a/src/test/regress/sql/delete.sql +++ b/src/test/regress/sql/delete.sql @@ -1,10 +1,11 @@ CREATE TABLE delete_test ( id SERIAL PRIMARY KEY, - a INT + a INT, + b text ); INSERT INTO delete_test (a) VALUES (10); -INSERT INTO delete_test (a) VALUES (50); +INSERT INTO delete_test (a, b) VALUES (50, repeat('x', 10000)); INSERT INTO delete_test (a) VALUES (100); -- allow an alias to be specified for DELETE's target table @@ -14,6 +15,11 @@ DELETE FROM delete_test AS dt WHERE dt.a > 75; -- to be referenced DELETE FROM delete_test dt WHERE delete_test.a > 25; -SELECT * FROM delete_test; +SELECT id, a, char_length(b) FROM delete_test; + +-- delete a row with a TOASTed value +DELETE FROM delete_test WHERE a > 25; + +SELECT id, a, char_length(b) FROM delete_test; DROP TABLE delete_test; diff --git a/src/test/regress/sql/insert.sql b/src/test/regress/sql/insert.sql index 8a9ccce2ea..a0ae85003f 100644 --- a/src/test/regress/sql/insert.sql +++ b/src/test/regress/sql/insert.sql @@ -28,4 +28,11 @@ insert into inserttest values(10, 20, '40'), (-1, 2, DEFAULT), select * from inserttest; +-- +-- TOASTed value test +-- +insert into inserttest values(30, 50, repeat('x', 10000)); + +select col1, col2, char_length(col3) from inserttest; + drop table inserttest; diff --git a/src/test/regress/sql/update.sql b/src/test/regress/sql/update.sql index b378d584a4..a8a028f710 100644 --- a/src/test/regress/sql/update.sql +++ b/src/test/regress/sql/update.sql @@ -54,4 +54,8 @@ UPDATE update_test SET (a,b) = (select a,b FROM update_test where c = 'foo') -- to the original table name UPDATE update_test AS t SET b = update_test.b + 10 WHERE t.a = 10; +-- Make sure that we can update to a TOASTed value. +UPDATE update_test SET c = repeat('x', 10000) WHERE c = 'car'; +SELECT a, b, char_length(c) FROM update_test; + DROP TABLE update_test;