From b60acaf568bec8afd72a37dc0a486e17d4c21ba3 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Wed, 28 Aug 2002 20:18:29 +0000 Subject: [PATCH] The following small patch provides a couple of minor updates (against 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 | 15 ++++++----- src/test/regress/expected/strings.out | 38 ++++++++++++++++++++++----- src/test/regress/sql/strings.sql | 16 +++++++++++ 3 files changed, 56 insertions(+), 13 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index c4e4affa11..81f1c4cfb7 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -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); diff --git a/src/test/regress/expected/strings.out b/src/test/regress/expected/strings.out index 373746ca7a..ae0b48590c 100644 --- a/src/test/regress/expected/strings.out +++ b/src/test/regress/expected/strings.out @@ -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; -- diff --git a/src/test/regress/sql/strings.sql b/src/test/regress/sql/strings.sql index af83a0b571..2095848a39 100644 --- a/src/test/regress/sql/strings.sql +++ b/src/test/regress/sql/strings.sql @@ -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; -- GitLab