The following small patch provides a couple of minor updates (against
authorBruce Momjian
Wed, 28 Aug 2002 20:18:29 +0000 (20:18 +0000)
committerBruce Momjian
Wed, 28 Aug 2002 20:18:29 +0000 (20:18 +0000)
CVS HEAD):

Amended "strings" regression test. TOAST tests now insert two values
with storage set to "external", to exercise properly the TOAST slice
routines which fetch only a subset of the chunks.

Changed now-misleading comment on AlterTableCreateToastTable in
tablecmds.c, because both columns of the index on a toast table are now
used.

John Gray

src/backend/commands/tablecmds.c
src/test/regress/expected/strings.out
src/test/regress/sql/strings.sql

index c4e4affa1190a4e94e468fbda7023b11498736df..81f1c4cfb7231ccc07f432d875309d7a94c1d0c9 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $Header: /cvsroot/pgsql/src/backend/commands/tablecmds.c,v 1.34 2002/08/27 03:56:34 momjian Exp $
+ *   $Header: /cvsroot/pgsql/src/backend/commands/tablecmds.c,v 1.35 2002/08/28 20:18:29 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -3417,12 +3417,13 @@ AlterTableCreateToastTable(Oid relOid, bool silent)
    /*
     * Create unique index on chunk_id, chunk_seq.
     *
-    * NOTE: the tuple toaster could actually function with a single-column
-    * index on chunk_id only.  However, it couldn't be unique then.  We
-    * want it to be unique as a check against the possibility of
-    * duplicate TOAST chunk OIDs.  Too, the index might be a little more
-    * efficient this way, since btree isn't all that happy with large
-    * numbers of equal keys.
+    * NOTE: the normal TOAST access routines could actually function with 
+    * a single-column index on chunk_id only. However, the slice access
+    * routines use both columns for faster access to an individual chunk.
+    * In addition, we want it to be unique as a check against the 
+    * possibility of duplicate TOAST chunk OIDs. The index might also be
+    * a little more efficient this way, since btree isn't all that happy 
+    * with large numbers of equal keys.
     */
 
    indexInfo = makeNode(IndexInfo);
index 373746ca7ac48fc8be835eca77918b8461fa006a..ae0b48590cf5fabef0784e3e4fb74272c5ab69ca 100644 (file)
@@ -579,6 +579,13 @@ SELECT text 'text' || varchar ' and varchar' AS "Concat text to varchar";
 CREATE TABLE toasttest(f1 text);
 insert into toasttest values(repeat('1234567890',10000));
 insert into toasttest values(repeat('1234567890',10000));
+--
+-- Ensure that some values are uncompressed, to test the faster substring
+-- operation used in that case
+--
+alter table toasttest alter column f1 set storage external;
+insert into toasttest values(repeat('1234567890',10000));
+insert into toasttest values(repeat('1234567890',10000));
 -- If the starting position is zero or less, then return from the start of the string
 -- adjusting the length to be consistent with the "negative start" per SQL92.
 SELECT substr(f1, -1, 5) from toasttest;
@@ -586,7 +593,9 @@ SELECT substr(f1, -1, 5) from toasttest;
 --------
  123
  123
-(2 rows)
+ 123
+ 123
+(4 rows)
 
 -- If the length is less than zero, an ERROR is thrown.
 SELECT substr(f1, 5, -1) from toasttest;
@@ -598,7 +607,9 @@ SELECT substr(f1, 99995) from toasttest;
 --------
  567890
  567890
-(2 rows)
+ 567890
+ 567890
+(4 rows)
 
 -- If start plus length is > string length, the result is truncated to
 -- string length
@@ -607,7 +618,9 @@ SELECT substr(f1, 99995, 10) from toasttest;
 --------
  567890
  567890
-(2 rows)
+ 567890
+ 567890
+(4 rows)
 
 DROP TABLE toasttest;
 --
@@ -616,6 +629,13 @@ DROP TABLE toasttest;
 CREATE TABLE toasttest(f1 bytea);
 insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
 insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
+--
+-- Ensure that some values are uncompressed, to test the faster substring
+-- operation used in that case
+--
+alter table toasttest alter column f1 set storage external;
+insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
+insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
 -- If the starting position is zero or less, then return from the start of the string
 -- adjusting the length to be consistent with the "negative start" per SQL92.
 SELECT substr(f1, -1, 5) from toasttest;
@@ -623,7 +643,9 @@ SELECT substr(f1, -1, 5) from toasttest;
 --------
  123
  123
-(2 rows)
+ 123
+ 123
+(4 rows)
 
 -- If the length is less than zero, an ERROR is thrown.
 SELECT substr(f1, 5, -1) from toasttest;
@@ -635,7 +657,9 @@ SELECT substr(f1, 99995) from toasttest;
 --------
  567890
  567890
-(2 rows)
+ 567890
+ 567890
+(4 rows)
 
 -- If start plus length is > string length, the result is truncated to
 -- string length
@@ -644,7 +668,9 @@ SELECT substr(f1, 99995, 10) from toasttest;
 --------
  567890
  567890
-(2 rows)
+ 567890
+ 567890
+(4 rows)
 
 DROP TABLE toasttest;
 --
index af83a0b5715b8c67f17e3db8da29698414b6ba0e..2095848a39dbea2d312c5c860c090964a5a439da 100644 (file)
@@ -206,6 +206,14 @@ CREATE TABLE toasttest(f1 text);
 insert into toasttest values(repeat('1234567890',10000));
 insert into toasttest values(repeat('1234567890',10000));
 
+--
+-- Ensure that some values are uncompressed, to test the faster substring
+-- operation used in that case
+--
+alter table toasttest alter column f1 set storage external;
+insert into toasttest values(repeat('1234567890',10000));
+insert into toasttest values(repeat('1234567890',10000));
+
 -- If the starting position is zero or less, then return from the start of the string
 -- adjusting the length to be consistent with the "negative start" per SQL92.
 SELECT substr(f1, -1, 5) from toasttest;
@@ -231,6 +239,14 @@ CREATE TABLE toasttest(f1 bytea);
 insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
 insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
 
+--
+-- Ensure that some values are uncompressed, to test the faster substring
+-- operation used in that case
+--
+alter table toasttest alter column f1 set storage external;
+insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
+insert into toasttest values(decode(repeat('1234567890',10000),'escape'));
+
 -- If the starting position is zero or less, then return from the start of the string
 -- adjusting the length to be consistent with the "negative start" per SQL92.
 SELECT substr(f1, -1, 5) from toasttest;