]> granicus.if.org Git - postgresql/commitdiff
Regression tests for TOAST.
authorRobert Haas <rhaas@postgresql.org>
Mon, 25 Apr 2011 13:46:53 +0000 (09:46 -0400)
committerRobert Haas <rhaas@postgresql.org>
Mon, 25 Apr 2011 13:48:10 +0000 (09:48 -0400)
Kevin Grittner, per discussion of bug #5989

src/test/regress/expected/delete.out
src/test/regress/expected/insert.out
src/test/regress/expected/update.out
src/test/regress/sql/delete.sql
src/test/regress/sql/insert.sql
src/test/regress/sql/update.sql

index 604d067f228f0941f58775e4d59c5bfc0b5fbf47..d3d1a357c0b937ae7694cc87e5dd0c7d6a2dd648 100644 (file)
@@ -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;
index d8510ea334f30b6bbef65fe98e93e4007f7bbce1..50bcead449db9be3c1d4be239bdcca952c3e256a 100644 (file)
@@ -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;
index 02aeccc7356daaea653e61268d313ff8f3dc1782..71b856f95c60525c2c0a214a92afe3e2e508e695 100644 (file)
@@ -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;
index 6b870bbbd5385cb1b4625e4c8b9447d0392aa1d7..d8cb99e93cb5cb1f9b6065a7a14fee5655cf6c43 100644 (file)
@@ -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;
index 8a9ccce2ea26efde7955ee3955ff07a1e4e817e5..a0ae85003fbec1e33c5ac37daa4a25da2c2cf50c 100644 (file)
@@ -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;
index b378d584a4af63c723267352de728f2a22e1c659..a8a028f7101988eadae702deae190f717f72312c 100644 (file)
@@ -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;